菜鸟教程小白 发表于 2022-12-13 07:56:28

ios - 使用 GET 方法无法使用 AFNetworking 2.0 获得响应


                                            <p><p>我无法使用这种方法获取数据,但是在使用其他 url 时它可以工作,而且我还在 postman 中进行了测试,我得到了响应。</p>

<pre><code>AFHTTPRequestOperationManager *manager = ;

// if you want to sent parameters you can use above code

manager.requestSerializer = ;

[manager GET:@&#34;http://192.168.1.156:81/a.php&#34; parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {

    NSLog(@&#34;responseObject %@&#34;,responseObject);

} failure:^(AFHTTPRequestOperation *operation, NSError *error) {

}];
</code></pre>

<p><strong>错误:</strong></p>

<pre>“请求失败: Not Acceptable 内容类型:text/html” UserInfo=0x8a6b000 {NSErrorFailingURLKey=http://192.168.1.156:81/a.php, AFNetworkingOperationFailingURLResponseErrorKey= { URL: http://192.168.1.156:81/a.php } { 状态码:200,标题 {
    连接=“保持事件”;
    “内容类型”=“文本/html”;
    日期 =“格林威治标准时间 2014 年 5 月 20 日星期二 14:49:20”;
    “保活”=“超时=5,最大值=100”;
    服务器 = "Apache/2.4.4 (Win64) PHP/5.4.12";
    “传输编码” = 身份;
    "X-Powered-By"= "PHP/5.4.12";
} }, NSLocalizedDescription=请求失败: Not Acceptable 内容类型:text/html}
</pre>

<p><strong>NSArray 转换错误:</strong></p>

<blockquote>
<p>Parsing JSON failed: Error Domain=NSCocoaErrorDomain Code=3840 &#34;The operation couldn’t be completed. (Cocoa error 3840.)&#34; (Invalid escape sequence around character 4677.) UserInfo=0xa82c130 {NSDebugDescription=Invalid escape sequence around character 4677.}</p>

<pre>Parse error on line 258:
...   &#34;story_title&#34;: &#34;today\&#39;s story&#34;,
-----------------------^
Expecting &#39;STRING&#39;, &#39;NUMBER&#39;, &#39;NULL&#39;, &#39;TRUE&#39;, &#39;FALSE&#39;, &#39;{&#39;, &#39;[&#39;
</pre>
</blockquote></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>您的错误消息告诉您 AFNetworking 期待 JSON 响应(即响应 header 的 <code>Content-Type</code> 应该是 <code>application/json</code> 并且响应的正文应该是实际的 JSON)。</p>

<p>这里有多种可能性之一:</p>

<ol>
<li><p>您的服务正在返回 JSON 正文,但忽略指定 <code>Content-Type</code>header 。在您的 PHP 代码中,在发送任何数据之前,指定 <code>Content-Type</code>header :</p>

<pre><code>header(&#34;Content-Type: application/json&#34;);
</code></pre>

<p>如果您无法修复 PHP(这是首选解决方案),您也可以告诉 AFNetworking 也接受 <code>text/html</code> 作为 <code>Content-Type</code>。我没有对此进行测试,但类似下面的内容应该将 <code>text/html</code> 添加到默认 <code>AFJSONResponseSerializer</code> 的 <code>acceptableContentTypes</code> 集合中:</p>

<pre><code>manager.responseSerializer.acceptableContentTypes = ;
</code></pre> </li>
<li><p>您的 Web 服务并非旨在返回 JSON。在这种情况下,您应该配置 <code>manager</code> 以接受非 JSON 响应,例如:</p>

<pre><code>mananger.responseSerializer = ;
</code></pre> </li>
<li><p>您的 Web 服务旨在正确返回 JSON 响应,但遇到了一些程序错误,导致无法正确生成 JSON。在这种情况下,临时更改 <code>manager</code> 以接受非 JSON 响应(如上面的第 2 点),然后检查响应(当然,假设您已经配置了<code>php.ini</code> 报告错误):</p>

<pre><code>NSLog(@&#34;responseObject = %@&#34;, [ initWithData:responseObject encoding:NSUTF8StringEncoding);
</code></pre>

<p>如果您看到的是 JSON,您可以使用 <code>NSJSONSerialization</code> 将其转换为数组:</p>

<pre><code>NSError *error;
NSArray *array = ;
if (!array) {
    NSLog(@&#34;Parsing JSON failed: %@&#34;, error);
}
</code></pre>

<p>显然,您可以将这个本地 <code>NSArray</code> 对象保存到您想要的任何类属性或实例变量中。</p></li>
</ol>

<hr/>

<p>您已使用 JSON 解析错误更新您的问题。这是 JSON 中 <code>\</code> 字符的结果。那是无效的。 (将您的 JSON 粘贴到 <a href="http://jsonlint.com" rel="noreferrer noopener nofollow">http://jsonlint.com</a> 中,它会确认这一点。)您的 PHP 没有正确生成 JSON。删除 <code>'</code> 之前的那个 <code>\</code>。只有在 JSON 中包含双引号时,才应使用此反斜杠转义。 </p>

<p>坦率地说,您似乎手动创建了这个 JSON。使用 PHP 函数 <code>json_encode</code> 会更好,它会为您完成所有适当的转义,完全避免这类 JSON 错误。</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 使用 GET 方法无法使用 AFNetworking 2.0 获得响应,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/23762900/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/23762900/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 使用 GET 方法无法使用 AFNetworking 2.0 获得响应