ios - API 请求仅在我传递参数时超时

标签 ios swift get digital-ocean flask-restful

我想弄清楚为什么每次我将有效的 json 传递到我的服务器以获取 GET 请求时连接超时。除了 GET 之外,我在任何其他请求类型中将 json 传递到我的服务器没有任何问题...我已经在本地测试了服务器端代码并​​且查询按预期工作。

我想从我的数据库中获取一个特定的用户,我需要传入一个用户名,所以我将用户名发送到服务器。

我不断收到错误(如果我不向服务器发送任何参数,而只是返回 current_user,它会工作并且我不会收到此错误)

 Domain=NSURLErrorDomain Code=-1001 "The request timed out." UserInfo={NSUnderlyingError=0x604000454c40 {Error Domain=kCFErrorDomainCFNetwork Code=-1001

这是 API 调用代码的一部分,我在其中设置了要发送到服务器的请求类型和值,以防:

let request = NSMutableURLRequest(url: url as URL)
    request.setValue("application/json; charset=utf-8", forHTTPHeaderField: "Content-Type")
    request.httpBody = jsonData
    request.httpMethod = "GET"

服务器设置,以防万一:
Digitalocean 液滴,Linux,Ubuntu 16.04,Nginx

编辑/更新
如果我将方法从 GET 更改为 POST(并保持服务器代码完全相同),服务器会立即发回正确的数据。

服务器端的代码非常短,所以我真的不明白它是如何因优化而超时的:

user = UserModel.find_by_username(data['username'])

    if user:
        return {"response": [user.json()]}, 200
    return {"response": "user not found"}, 404

看起来真的好像我们不能通过 GET 方法发送 json。它似乎在模拟器和实际设备上都不起作用......我看到了一个类似的 SO 帖子,其中有人评论了我正在经历的事情。将 GET 更改为 POST 是解决方法....但它是一个 GET 请求,那么为什么这行不通呢?

最佳答案

GET-Method 不支持 http body。当您将参数作为 url 编码发送时,它将起作用。

示例:

http://www.example.de?username=abc

关于ios - API 请求仅在我传递参数时超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50892849/

相关文章:

ios - 只有 1 个垂直 'column' 仍然流入 2 列的 UICollectionView

json - SwiftyJson 和 firestore 时间戳 swift

ios - 如何删除某种类型的所有 subview

swift - 访问相机时 ios 10 应用程序崩溃

Javascript: <script src=jquery...只有当条件为真时

ios - Xcode 不显示运行设备

iOS GCM 通知发送,但不显示

ios - 是否可以更改应用程序 Logo ,例如日历应用程序?

java - 你必须在java中设置和获取吗?

javascript - 在 HTML 或 JavaScript 中设置自定义 userAgent