代码之家  ›  专栏  ›  技术社区  ›  user7804097

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

  •  0
  • user7804097  · 技术社区  · 6 年前

    我试图弄明白为什么每次我将有效的JSON传递给服务器以获取请求时,连接都会超时。除了GET之外,我在将JSON以任何其他请求类型传递到我的服务器上没有任何问题。我已经在本地测试了服务器端代码,查询工作正常。

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

    我不断得到的错误(如果我不向服务器发送任何参数,只返回当前用户,它会工作,我不会得到这个错误)

     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。它似乎既不能在模拟器上工作,也不能在实际设备上工作……我看到了一个类似的帖子,上面有人对我正在经历的事情进行了准确的评论。更改get to post是解决方法……但这是一个get请求,所以为什么不起作用?

    1 回复  |  直到 6 年前
        1
  •  3
  •   Johannes    6 年前

    get方法不支持HTTP主体。当您将参数作为URL编码发送时,它将起作用。

    例子:

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