【问题标题】:Error when POST ing through Ruby. Postman works fine通过 Ruby 进行 POST 时出错。邮递员工作正常
【发布时间】:2017-08-31 08:03:53
【问题描述】:

我在尝试发布到第三方网站时遇到了一个奇怪的问题。

使用 Postman 进行测试时,我得到了正确的响应。但是,当通过 Ruby 代码尝试相同的 POST 时,我从网站上得到了一个神秘的 HTML 响应页面。 HTTP 响应代码为 200。只是网站的内部逻辑抛出了一个错误,如果我通过代码发送的请求与通过 Postman 发送的请求完全相同,则不会发生这种情况。

网址是:http://www.sunat.gob.pe/cl-at-ittipcam/tcS01Alias

在该网页显示的下拉框中选择月份(“mes”)和日期(“dia”)时,可以在浏览器中生成 POST。我还在浏览器控制台中检查了这种情况下的网络调用,并没有发现任何有趣的地方。

我的代码直接来自 Postman 生成的代码。我也尝试过具有相同错误响应的 HTTParty gem

require 'uri'
require 'net/http'

url = URI("http://www.sunat.gob.pe/cl-at-ittipcam/tcS01Alias")

http = Net::HTTP.new(url.host, url.port)

request = Net::HTTP::Post.new(url)
request["cache-control"] = 'no-cache'
request["content-type"] = 'application/x-www-form-urlencoded'
request["postman-token"] = '3ba1963c-2874-89c2-5e4d-e5be2c13a560'
request.body = "mes=05&anho=2016"

response = http.request(request)
puts response.read_body

正确的响应应该显示一个包含值的 HTML 表格。相反,我得到一个 HTML 错误页面。

任何解决问题的帮助将不胜感激。

编辑:HTML 响应并不真正相关,因为它是业务逻辑错误,而不是 HTTP 错误,但这里是:

问题是:这个内部逻辑错误被触发了,因为通过代码发送 POST 请求与通过 Postman 发送请求不同,我不知道是什么。

"\r\n\r\n.:: 错误页面 ::.\r\n\r\n\r\n\r\n身体 {font-style:normal;font-size:10pt;font-family:Verdana,Arial,Helvetica,sans-serif;}\r\nH1 {font-size:16pt;color:Navy;}\r\nA {color:Navy;}\r\n.msg {字体样式:粗体;字体大小:14pt;}\r\n.error {字体样式:粗体;字体大小:14pt;颜色:红色;}\r\n.datos {字体大小:12pt;}\r\n.soluc {字体大小:12pt;}\r\n\r\n\r\nLa aplicación ha retornado el siguiente problema :\r\n

\r\n
\r\n\r\n
\r\n\r\nAcción a realizar :\r\n\r\ n\r\n支持新意 realizar la opacion, si el problema persiste, avisar a nuestro 网站管理员 o\r\ncomunicarse con Atenci\xF3n a Usuarios。\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n(function(){var f5_cspm={f5_p:'NEHEKPGFEEIGMFMPAJJJKDPGKDEIIJJIDBONLBJECPDLCCOBKCPONGDHNEIJOKPPCGMBMAGEAADECGEHHJAAAPLKAANKMODHPLFBCJKHMMCPOAKONNKGFELHONBMHBIO',setCharAt:function(str,index,chr){if(index>str.length-1)return str;返回 str.substr(0,index)+chr+str.substr(index+1);},get_byte:function(str,i){var s=(i/16)|0;i=(i&15);s=s*32;return((str.charCodeAt(i+16+s)-65)>4)+65 ));str=f5_cspm.setCharAt(str,(i+s),String.fromCharCode((b&15)+65));return str;},set_latency:function(str,latency){latency=latency&0xffff;str=f5_cspm.set_byte(str,40,(latency>>8));str=f5_cspm.set_byte(str,41,(latency&0xff)); str=f5_cspm.set_byte(str,35,2);返回 str;},wait_perf_data:function(){try{var wp=window.performance.timing;if(wp.loadEventEnd>0){var res=wp.loadEventEnd-wp.navigationStart;if(res

【问题讨论】:

  • 你能发布html响应吗?通常这应该可以帮助您了解问题所在。
  • 我能够重现它。您正在 Ruby 中执行 POST 请求,并且很可能在 Postman 中执行 GET 请求

标签: ruby-on-rails ruby post postman


【解决方案1】:

您可能需要使用 GET 请求来获取表格。服务器没有响应 POST 请求,因为它没有被配置为响应它。

解决方法是使用:

uri = URI('http://www.sunat.gob.pe/cl-at-ittipcam/tcS01Alias')
request = Net::HTTP::Get.new(uri)

Post.new代替代码

【讨论】:

  • 谢谢你。但是该网站同时响应 GET 和 POST 请求。它通过显示当前月份的值来响应不带参数的 GET 请求,并使用指定的月份和年份参数响应 POST 请求。您可以使用 Postman 自行测试。您还可以通过导航到网站、选择具有任何有效日期和月份值的保管箱并按下顾问按钮来对其进行测试。这将生成一个 POST 请求,您可以使用浏览器控制台检查该请求。
猜你喜欢
  • 2019-10-15
  • 2020-08-07
  • 1970-01-01
  • 2018-10-20
  • 1970-01-01
  • 1970-01-01
  • 2020-08-06
  • 2020-12-22
  • 2019-02-07
相关资源
最近更新 更多