ASIHTTPRequest Возвращение HTML вместо JSON - PullRequest
2 голосов
/ 06 июля 2011

Я использую ASIHTTPRequest для связи с API, проблема в том, что он возвращает html вместо JSON, и я понятия не имею, почему.Все работало отлично в течение нескольких недель, и я не могу понять, что сломалось ..

Что странно, если делать точно такой же запрос с браузером, или postie возвращает правильный ответ JSON, но когда я делаюзапрос через ASIHTTPRequest это заголовки ответа, которые я получаю:

"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;

И HTML (который должен быть 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...

Вот код, используемый для выполнения запроса..

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

Я трижды проверил все данные для входа / URL, все правильно, я был бы очень признателен за любую помощь с этим, поскольку я полностью потерян.

-

Обновление:

Маяк обнаружил ошибку, касающуюся заголовков на их стороне.В ожидании решения от них.

Ответы [ 2 ]

6 голосов
/ 06 июля 2011

Проверяли ли вы, что заголовки , отправленные с помощью браузера, также совпадают с отправленными запросами по коду?

Особенно вы пытались добавить заголовок "Принять" вВаш запрос, чтобы определить, что вы принимаете JSON Content-Type?

[request addRequestHeader:@"Accept" value:@"application/json"];
1 голос
/ 06 июля 2011

Попробуйте использовать инструмент, такой как wireshark или charlesproxy, чтобы сравнить рабочие запросы от вашего браузера / postie и сравнить их с нерабочими запросами от ASIHTTPRequest - как только вы обнаружите, что отличается, это должно быть легко исправить.

Предложение AliSoftware - одно из наиболее вероятных отличий, которые вы увидите, но, возможно, есть и другие вещи.

...