0 অক্ষরের আশেপাশে অ্যালামোফায়ার অবৈধ মান


94
Alamofire.request(.GET, "url").authenticate(user: "", password: "").responseJSON() {
    (request, response, json, error) in
    println(error)
    println(json)

}

এটি অ্যালামোফায়ারের সাথে আমার অনুরোধ, একটি নির্দিষ্ট অনুরোধের জন্য এটি কিছু সময় কাজ করে তবে কখনও কখনও আমি তা পাই:

Optional(Error Domain=NSCocoaErrorDomain Code=3840 "The operation couldn’t be completed. (Cocoa error 3840.)" (Invalid value around character 0.) UserInfo=0x78e74b80 {NSDebugDescription=Invalid value around character 0.})

আমি পড়েছি যে এটি অবৈধ JSON এর কারণে হতে পারে, তবে প্রতিক্রিয়াটি একটি স্থির জাসন স্ট্রিং যা আমি JSON যাচাইকারীকে বৈধ বলে প্রমাণিত করেছি। এটিতে å ä ö অক্ষর এবং কিছু HTML রয়েছে।

কেন আমি মাঝে মাঝে এই ত্রুটি পাচ্ছি?


13
আমি যখন এই ত্রুটিটি পাই তখন আমার একটি কাজ করতে পছন্দ করা হ'ল responseJSON() { ... }ব্লকটি কমেন্ট করে প্রতিস্থাপন করা .responseString { _, _, s, _ in println(s) }। এটি আপনাকে এমন কোনও জিনকে দেখতে দেয় যা যে কোনও অদ্ভুত পাঠ্যের জন্য ফিরে আসে এবং এটি এটিকে অপছন্দযোগ্য করে responseJSON
তুলবে

প্রতিক্রিয়া স্থিতি কোড কি?
সাহিল কাপুর

4
আমি একটি স্ট্যাটাস কোড 200 পাই এবং আমি এই ত্রুটিটি পাই। এএইচএইচএইচ আমার ক্ষেত্রে মস্তিষ্কের মৃত্যু :)। আমি সার্ভার থেকে আসলে জেএসএনকে ফিরছিলাম না। এটি সমাধান করে।
ক্রিস প্রিন্স

আপনি যদি ব্যবহার করেন তবে এটি কাজ করবে। পোস্ট পদ্ধতি।
সুরজিৎ রাজপুত

আপনার ইউআরএল দেখুন :)
অলোক

উত্তর:


142

আমিও একই সমস্যার মুখোমুখি হয়েছি। আমি responseStringপরিবর্তে চেষ্টা করেছিলাম responseJSONএবং এটি কাজ করে। আমার ধারণা Alamofireএটির সাথে এটি ব্যবহার করার ক্ষেত্রে এটি একটি বাগ django


4
যে ইশারা জন্য ধন্যবাদ। আমি প্রতিক্রিয়া জেএসএন ব্যবহার করছিলাম তবে সার্ভারের আসল প্রতিক্রিয়াটি এক্সএমএল ফর্ম্যাটে ছিল! আমার মাথা ব্যাথা রক্ষা করেছেন :)
C0D3

কয়েক ঘন্টা পরে এই সমস্যার মুখোমুখি হয়ে আমার প্রকল্পটি সংরক্ষণ করেছে I আমি এটি করছিলাম না, তবে একবার করে ফেললে আমি আলসোফায়ার থেকে প্রতিক্রিয়া জেএসএন ব্যবহার করতে পারি
guijob

আপনি যদি জিইটি ব্যবহার করছেন তবে আপনার কেবল পোস্ট পোস্টের জন্য রেসপন্স জেএসওএন ব্যবহার করে এটি প্রতিক্রিয়া সহ পরীক্ষা করা দরকার। রেফারেন্স: গ্রোকসইউইফট্
অনুরাগ শর্মা ২

আমার আইওএস অ্যাপ্লিকেশনে এই সমস্যাটির কারণে আমি গ্রাহককে হারিয়েছি।
জাসিম আব্বাস

4
আপনার প্রতিক্রিয়াটি এইচটিএমএল-এর সাথে মিশে গেছে, আপনাকে এইচটিএমএল বিশ্লেষণ করতে হবে এবং জসন স্ট্রিংটি বের করে ডিকশনারে রূপান্তর করতে হবে। আমি SwiftSoup আউট বা parseHtml চেহারায় ভাল বিকল্প জন্য চেষ্টা সুপারিশ stackoverflow.com/questions/31080818/...
স্মিট

9

আমি যেমন ব্যবহার করছিলাম তেমন অ্যালামোফায়ারে মাল্টিপার্ট ফর্মে চিত্র আপলোড করার সময় আমি একই ত্রুটি পেয়েছি

multipartFormData.appendBodyPart(data: image1Data, name: "file")

আমি প্রতিস্থাপন দ্বারা স্থির

multipartFormData.appendBodyPart(data: image1Data, name: "file", fileName: "myImage.png", mimeType: "image/png")

আশা করি এটি কারও সাহায্য করবে।


এটি বের করার চেষ্টা করার জন্য আমার কয়েক ঘন্টা ছিল। আমি ভাবছি কেন এই সমাধান কাজ করে ... ধন্যবাদ!
এমএক্সভি

7

এটি আপনাকে সাহায্য করুক

Alamofire.request(.GET, "YOUR_URL")
     .validate()
     .responseString { response in
         print("Success: \(response.result.isSuccess)")
         print("Response String: \(response.result.value)")
     }

হ্যাঁ ব্রো.আই আপনার উত্তর থেকে অনুপ্রাণিত। আমি কেবল যে কোনও ফ্রেশার জন্য কোড আপলোড করেছি
ক্রুতার্থ প্যাটেল

7

আমার ক্ষেত্রে, আমার সার্ভারের URL টি ভুল ছিল incor আপনার সার্ভারের ইউআরএল পরীক্ষা করুন !!


এটা আমার জন্য সমস্যা ছিল। আমি বিশ্বাস করতে পারি না যে আমি এটি মিস করেছি। আমাকে প্রথমে ইউআরএল পরীক্ষা করার অভ্যাস করতে হবে এবং সর্বদা!
লন্ডনগুই

6

একই সমস্যাটি আমার কাছে ঘটেছিল এবং সামগ্রীর ধরণের সেট করা না হওয়ায় এটি প্রকৃতপক্ষে একটি সার্ভার সমস্যা হিসাবে শেষ হয়েছিল।

যুক্ত হচ্ছে

.validate(contentType: ["application/json"])

অনুরোধ শৃঙ্খলা থেকে আমার জন্য এটি সমাধান

Alamofire.request(.GET, "url")
        .validate(contentType: ["application/json"])
        .authenticate(user: "", password: "")
        .responseJSON() { response in
            switch response.result {
            case .Success:
                print("It worked!")
                print(response.result.value)
            case .Failure(let error):
                print(error)
            }
        }

4

আমি একই ত্রুটি পেয়েছি। তবে আমি এর সমাধান খুঁজে পেয়েছি।

দ্রষ্টব্য 1: "এটি অ্যালার্মোফায়ার ত্রুটি নয়", এটি সার্ভার ত্রুটির প্রবণতা।

দ্রষ্টব্য 2: আপনার "রেসপন্সজেসন" "রেসপন্সস্ট্রিং" তে পরিবর্তন করার দরকার নেই।

public func fetchDataFromServerUsingXWWWFormUrlencoded(parameter:NSDictionary, completionHandler: @escaping (_ result:NSDictionary) -> Void) -> Void {

        let headers = ["Content-Type": "application/x-www-form-urlencoded"]
        let completeURL = "http://the_complete_url_here"
        Alamofire.request(completeURL, method: .post, parameters: (parameter as! Parameters), encoding: URLEncoding.default, headers: headers).responseJSON { response in

            if let JSON = response.result.value {
                print("JSON: \(JSON)") // your JSONResponse result
                completionHandler(JSON as! NSDictionary)
            }
            else {
                print(response.result.error!)
            }
        }
    }

4

এইভাবেই আমি অবৈধ 3840 এরর সমাধান করতে পেরেছি।

ত্রুটি লগ

 responseSerializationFailed(Alamofire.AFError.ResponseSerializationFailureReason.jsonSerializationFailed(Error Domain=NSCocoaErrorDomain Code=3840 "Invalid value around character 0." UserInfo={NSDebugDescription=Invalid value around character 0.}))
  1. সাথে ছিল অনুরোধে ব্যবহৃত এনকোডিং প্রকারের , ব্যবহৃত এনকোডিং প্রকারটি আপনার সার্ভার-সাইডে স্বীকার করা উচিত ।

এনকোডিংটি জানতে আমাকে সমস্ত এনকোডিং প্রকারের মধ্যে দিয়ে যেতে হয়েছিল:

ডিফল্ট / পদ্ধতিনির্ভরশীল / ক্যোয়ারী স্ট্রিং / HTBody ody

    let headers: HTTPHeaders = [
        "Authorization": "Info XXX",
        "Accept": "application/json",
        "Content-Type" :"application/json"
    ]

    let parameters:Parameters = [
        "items": [
                "item1" : value,
                "item2": value,
                "item3" : value
        ]
    ]

    Alamofire.request("URL",method: .post, parameters: parameters,encoding:URLEncoding.queryString, headers: headers).responseJSON { response in
        debugPrint(response)
     }
  1. এটি যথাযথভাবে আমরা যে প্রতিক্রিয়া অর্জন করছি তা নির্ভর করে
    • প্রতিক্রিয়া
    • প্রতিক্রিয়া JSON
    • প্রতিক্রিয়াডাটা

প্রতিক্রিয়া একটি JSON- & প্রতিক্রিয়া ব্যবহারে শুধু স্ট্রিং না হয়, তাহলে responseString

উদাহরণ : লগইন / টোকেন API তৈরির ক্ষেত্রে:

"20dsoqs0287349y4ka85u6f24gmr6pah"

প্রতিক্রিয়া


2

আমি এটি শিরোনাম হিসাবে ব্যবহার করে সমাধান করেছি:

let header = ["Content-Type": "application/json", "accept": "application/json"]



1

হতে পারে এটি অনেক দেরিতে হয়েছে তবে আমি এখানে উল্লেখ না করে অন্যভাবে এই সমস্যাটি সমাধান করেছি:

আপনি যখন ব্যবহার করবেন .responseJSON(), আপনাকে অবশ্যই প্রতিক্রিয়া শিরোনামটি সেট করে content-type = application/jsonরাখতে হবে, তা না হলে এটি ক্র্যাশ হয়ে যাবে এমনকি আপনার দেহটি বৈধ জেএসএন। সুতরাং, আপনার প্রতিক্রিয়া শিরোনামটি খালি বা অন্য কোনও সামগ্রী-টাইপ ব্যবহার করে।

নিশ্চিত করুন আপনার প্রতিক্রিয়া হেডার সঙ্গে সেট করা হয় content-type = application/jsonথেকে .responseJSON()সঠিকভাবে Alamofire কাজে।


1

ওহে ছেলেরা এটাই আমার সমস্যা বলে মনে হয়েছে: আমি একটি ফাংশনের মাধ্যমে অ্যালামোফায়ারকে প্রামাণিক ব্যবহারকারীদের কাছে কল করছিলাম: আমি "লগইন ব্যবহারকারী" ফাংশনটি "বডি" থেকে ডাকা হবে এমন পরামিতিগুলির সাথে ব্যবহার করেছি (ইমেল: স্ট্রিং, পাসওয়ার্ড: স্ট্রিং) এটি পাস হবে

আমার ভুলটি হ'ল:

alচ্ছিক (alamofire.aferror.responseseializationfailed (alamofire.aferror.responseseializationfailurereason.jsonserializationfailed (ত্রুটি ডোমেন = nscocoerrordomain কোড = 3840 "চরিত্রের চারপাশে অবৈধ মান 0" userinfo = s nsdebugdescription = অক্ষরের চারপাশে অবৈধ মান

অক্ষর 0 এখানে মূল কী: যার অর্থ "ইমেল" এর জন্য কলটি পরামিতিগুলির সাথে মেলে না: নীচের কোডটি দেখুন

ফানক লগইন ইউজার (ইমেল: স্ট্রিং, পাসওয়ার্ড: স্ট্রিং, ডাউনলোড: সম্পূর্ণ ডাউনলোড @ কমপ্লেইন) lower লোয়ারকেসড ইমেইল = ইমেইল.হ্রাসিত করুন ()

    let header = [
        "Content-Type" : "application/json; charset=utf-8"
    ]
    let body: [String: Any] = [
        "email": lowerCasedEmail,
        "password": password
    ]

    Alamofire.request(LOGIN_USER, method: .post, parameters: body, encoding: JSONEncoding.default, headers: header).responseJSON { (response) in
        if response.result.error == nil {

            if let data = response.result.value as? Dictionary<String, AnyObject> {
                if let email = data["user"] as? String {
                    self.userEmail = email
                    print(self.userEmail)
                }
                if let token = data["token"] as? String {
                    self.token_Key = token
                    print(self.token_Key)
                }

ফাংশন প্যারামিটারগুলিতে "ইমেল" অবশ্যই পার্সিং করার সময় লেট "ইমেল" এর সাথে মিলে যাবে তবে এটি কাজ করবে..আমি ত্রুটিটি আর পাইনি ... এবং অ্যালিফায়ার অনুরোধের জন্য "বডি" প্যারামিটারের অক্ষর 0 "ইমেল" ছিল:

আশাকরি এটা সাহায্য করবে


1

আমি আমার প্যারামিটারগুলিতে সার্ভারে অনুচিত টাইপ (স্ট্রিং) প্রেরণ করছিলাম (কোনও ইন্টার হওয়া দরকার)।


1

এনকোডিং যুক্ত করার পরে ত্রুটিটি সমাধান করা হয়েছিল: আলাসোফায়ারের সাথে JSONEncoding.default।

  Alamofire.request(urlString, method: .post, parameters: 
  parameters,encoding: 
  JSONEncoding.default, headers: nil).responseJSON {  
   response in
   switch response.result {
                   case .success:
                    print(response)
                    break

                    case .failure(let error):
                     print(error)
        }
   }

0

আমি আজ সকালে যে অ্যাপ্লিকেশনটিতে কাজ করছি সে ক্ষেত্রেও ত্রুটি ছিল। আমি বিশ্বাস করি যে এটি কোনও ব্যবহারকারীর চিত্র আপলোড করতে অক্ষম হওয়ায় এটি একটি সার্ভার সাইড ত্রুটি।

তবে, আমার কাস্টম এপিআই চেক করার পরে, আমি বুঝতে পেরেছিলাম যে আমার ওয়েবসাইটটিতে একটি এসএসএল শংসাপত্র যুক্ত করার পরে আমি api.swif URL টি আপডেট করেছি না, ডেটা পোস্ট করতে অক্ষম ছিল:

let HOME_URL = "http://sitename.io"
let BASE_URL = "http://sitename.io/api"
let UPLOAD_URL = "http://sitename.io/api/user/upload"

আমি URL টি https: // এ পরিবর্তন করেছি। সমস্যা সমাধান.


0

আমার ক্ষেত্রে আমাকে এই কীটি যুক্ত করতে হবে: "স্বীকার করুন": আমার শিরোনামের অনুরোধে "অ্যাপ্লিকেশন / জেসন"।

এটার মতো কিছু:

let Auth_header: [String:String] = ["Accept":"application/json", "Content-Type" : "application/json", "Authorization":"Bearer MyToken"]

আমি আশা করি এটি কারও সাহায্য করতে পারে।


0

আমি একই সমস্যার মুখোমুখি হয়েছি এবং সমস্যাটি প্যারামে রয়েছে।

let params = [kService: service,
                  kUserPath: companyModal.directory_path,
                  kCompanyDomain: UserDefaults.companyDomain,
                  kImageObject: imageString,
                  kEntryArray: jsonString,
                  kUserToken:  UserDefaults.authToken] as [String : Any]

companyModal.directory_pathইউআরএল হয়। এটি স্ট্রিং থেকে সার্ভার সাইডে সমস্যা তৈরি করে এমন কোনওটিতে জোর করে। এই সমস্যাটি সমাধান করার জন্য আমাকে ডিফল্ট মান দিতে হবে যা এটির স্ট্রিংয়ের মান করে।

 let params = [kService: kGetSingleEntry,
                  kUserPath: companyModal.directory_path ?? "",
                  kCompanyDomain: UserDefaults.companyDomain,
                  kUserToken: UserDefaults.authToken,
                  kEntryId: id,
                  ] as [String: Any]

0

আপনার পথের শেষে সম্ভবত "/" আছে। যদি এটি জিইটি অনুরোধ না হয় তবে আপনার "/" শেষে রাখা উচিত নয়, অন্যথায় আপনি ত্রুটি পাবেন


0

আমি মাইমটাইপটিকে "মুভ" থেকে "মাল্টিপার্ট / ফর্ম-ডেটা" তে পরিবর্তন করেছি।

Alamofire.upload(multipartFormData: { (multipartFormData) in
            do {
                let data = try Data(contentsOf: videoUrl, options: .mappedIfSafe)
                let fileName = String(format: "ios-video_%@.mov ", profileID)
                multipartFormData.append(data, withName: "video", fileName: fileName, mimeType: "multipart/form-data")

            } catch  {
                completion("Error")
            }
        }, usingThreshold: .init(), to: url,
           method: .put,
           headers: header)

আমার জন্য কাজ করেছেন .. :)


0

আমার ক্ষেত্রে:

let header = ["Authorization": "Bearer \(Authserices.instance.tokenid)"]

আমি জায়গাটি ভুলে গিয়েছিলাম \(পরে Bearer)


0

আমার ক্ষেত্রে ত্রুটিটি নকল ইমেলের কারণে হয়েছিল। প্রতিক্রিয়া ঠিক আছে কি নেই তা দেখতে আপনি পোস্টম্যানে আপনার এপিআইটি আবার যাচাই করতে পারেন।


0

আমার ক্ষেত্রে, আমি এপিআই পেতে পোস্টম্যান ব্যবহার করার চেষ্টা করেছি এবং এই ত্রুটিটি ব্যাকএন্ড থেকে এসেছে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.