仅当我传递参数时,API请求才会超时

时间:2018-06-17 00:52:05

标签: ios swift get digital-ocean flask-restful

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

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

我一直在犯的错误(如果我没有向服务器发送任何参数,只返回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 Droplet,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请求,所以为什么这不起作用?

1 个答案:

答案 0 :(得分:3)

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

示例:

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