ASIHTTPRequest Returning HTML instead of JSON

人走茶凉 提交于 2019-12-10 11:23:10

问题


I am using ASIHTTPRequest to contact an API the problem is that it is returning html instead of JSON and i have no idea why. Everything has been working great for weeks and i can't seem to figure out what has broken..

What's strange is doing exactly the same request with a browser or postie returns the correct JSON response, but when i do the request via ASIHTTPRequest these are the response headers i get:

"Cache-Control" = "private, max-age=0, must-revalidate";
    Connection = "keep-alive";
    "Content-Encoding" = gzip;
    "Content-Type" = "text/html; charset=utf-8";
    Date = "Tue, 05 Jul 2011 21:11:10 GMT";
    Etag = "\"e467792713ac4124f055c1719f4ea6c2\"";
    Server = "nginx/0.7.65";
    Status = "200 OK";
    "Transfer-Encoding" = Identity;
    "X-Runtime" = 1;

And the html (which should be json)..

<div id="universal_meta" logged_in_user_id="removed" style="display:none"></div>
<div id="meta" screen="projects" logged_in_as="removed"></div>
<h1>9 projects with 50 open issues</h1>
<ul class="biglinks progressbars">
 etc...

Here is the code used to do the request..

NSURL *url = [NSURL URLWithString:path];
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];

if(secure){
       [request setUsername:self.username];
       [request setPassword:self.password];
}

[request setDelegate:self];
[request setDidFinishSelector:@selector(requestDone:)];
[request setDidFailSelector:@selector(requestWentWrong:)];
[request setDownloadDestinationPath:destination];

[[self queue] addOperation:request]; //queue is an NSOperationQueue

I have triple checked all of the login details/url, everything is correct, i would really appreciate any help with this one as i am completely lost.

--

Update:

Lighthouse have acknowledged a bug regarding headers on their side. Waiting on a solution from them.


回答1:


Did you check that the headers sent using your browser are also the same as when you send the request by code?

Especially did you try to add the "Accept" header to your request to define that you accept the json Content-Type?

[request addRequestHeader:@"Accept" value:@"application/json"];



回答2:


Try using a tool like wireshark or charlesproxy to compare the working requests from your browser/postie, and compare them to the non-working requests from ASIHTTPRequest - once you spot what's different it should be easy to fix.

AliSoftware's suggestion is one of the most likely differences you'll see, but it's possible there are other things too.



来源:https://stackoverflow.com/questions/6589048/asihttprequest-returning-html-instead-of-json

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!