当前位置: 首页 > 知识库问答 >
问题:

Post请求不能与REST客户端一起工作,但可以与Faraday和Postman一起工作

白侯林
2023-03-14
curl -X POST \
  'https://mysite.vn/api/tokens?email=my_email@gmail.com&password=my_password12&grant_type=password' \
  -H 'Content-Type: application/json' \
  -H 'Postman-Token: 5dea5d74-80e6-41b1-87bc-ee3c81cf754a' \
  -H 'cache-control: no-cache'
request_body = '{"email": "my_email@gmail.com", "password": "my_password12", "grant_type":"password"}'
conn = Faraday.new(:url => 'https://mysite.vn/api/tokens')
response_faraday = conn.post do |req|
      req.headers['Content-Type'] = 'application/json'
      req.body = request_body
end
puts response_faraday.status

3)使用REST客户端

new_payload = {
        email: 'my_email@gmail.com',
        password: 'my_password12',
        grant_type: 'password'
    }
    response_resclient = RestClient::Request.execute(
               method: :post,
               url: 'https://mysite.vn/api/tokens',
               payload: new_payload.to_json,
               headers:  {'Content-Type': 'application/json', 'Accept': 'application/json'})

将response_resclient.code

对于1和2,两者都是正确的。它们都返回状态201,登录成功,但使用3-REST_Client失败。状态为404

D, [2019-01-18T00:25:11.355649 #7764] DEBUG -- : [httplog] Sending: POST http://mysite.vn:443/api/v2/tokens/
D, [2019-01-18T00:25:11.356434 #7764] DEBUG -- : [httplog] Data: {"email": "my_email@gmail.com", "password": "my_password12", "grant_type":"password"}
D, [2019-01-18T00:25:11.362419 #7764] DEBUG -- : [httplog] Status: 201
D, [2019-01-18T00:25:11.362419 #7764] DEBUG -- : [httplog] Benchmark: 0.053334 seconds
D, [2019-01-18T00:25:11.363419 #7764] DEBUG -- : [httplog] Response:
201

REST_Client:

D, [2019-01-18T00:37:29.982352 #12472] DEBUG -- : [httplog] Connecting: mysite.vn:443
D, [2019-01-18T00:37:31.105052 #12472] DEBUG -- : [httplog] Sending: POST http://mysite.vn:443/api/v2/tokens/
D, [2019-01-18T00:37:31.105052 #12472] DEBUG -- : [httplog] Data:
D, [2019-01-18T00:37:31.111003 #12472] DEBUG -- : [httplog] Status: 404
D, [2019-01-18T00:37:31.112000 #12472] DEBUG -- : [httplog] Benchmark: 0.010938 seconds
D, [2019-01-18T00:37:31.112997 #12472] DEBUG -- : [httplog] Response:
<html>
<head><title>404 Not Found</title></head>
<body>
<center><h1>404 Not Found</h1></center>
<hr><center>nginx</center>
</body>
</html>

对于Rest-client gem,它在向mysite.vn发送post请求后返回404错误,代码为443。我对这个案子没有理想。请你帮我解释一下这个案子好吗。如何用REST客户端纠正这个问题

共有1个答案

於鸿羲
2023-03-14

从Rest_Client调试中,您可能知道数据是空的。

D, [2019-01-18T00:37:31.105052 #12472] DEBUG -- : [httplog] Data:

看来你对待它不对。请尝试以下操作:

curl -X POST \
  'https://mysite.vn/api/tokens' \
  -H 'Content-Type: application/json' \
  -H 'Postman-Token: 5dea5d74-80e6-41b1-87bc-ee3c81cf754a' \
  -H 'cache-control: no-cache' \
  -d '{"email": "my_email@gmail.com", "password": "my_password12", "grant_type":"password"}'

有关-d标志的更多信息,请参见man curl

 类似资料:
  • 在我的Laravel应用程序中,我需要定期使用Guzzle将数据发送到API。 API使用承载令牌进行身份验证,并请求和接受原始JSON。为了进行测试,我使用Postman访问了API,一切都工作得很好。

  • 我有一个非常简单的(现有的)web服务,我希望使用JDK8生成一个web服务客户机。 我使用的是纯JDK8工具链,这意味着我使用的是JDK8目录中的wsimport工具。 现在问题来了:JDK8中的wsimport工具生成的Java源代码不符合JDK8 Javadoc。正如您可能知道的那样,Javadoc工具在JDK8中变得更加严格。 请考虑以下简单模式: 为此,wsimport工具将生成Java

  • 我有一个两个Spring Boot应用程序。一个是进行rest调用的rest客户端。另一个只有Restendpoint的应用程序。 当rest客户机到达Restendpoint时,它会失败。 这是用于命中restendpoint的代码: 这是客户端尝试访问的其余endpoint: 这是我在带有restendpoint的应用程序中看到的错误: 为什么 Rest 调用适用于邮递员而不是我的 rest

  • 错误:org.apache.hive.service.cli.hivesqlexception:处理语句时出错:失败:执行错误,从org.apache.hive.service.cli.operation.operation.toSqlexception(operation.java:380)(org.apache.hive.service.cli.operation.sqloperation.r

  • 我正在开发一个Spotify应用程序,我想获得令牌。 我做错了什么? 真的有办法使用JavaScript从静态HTML文件中使用Spotify API吗?

  • 我的app.js: 我的Express.js: 给出错误: