通过Ruby进行POST时出错。邮差很好

时间:2017-08-30 23:22:17

标签: ruby-on-rails ruby post postman

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

使用Postman进行测试时,我得到了正确的答案。但是,当通过Ruby代码尝试相同的POST时,我从网站上获得了一个神秘的HTML响应页面。 HTTP响应代码是200.只是网站的内部逻辑引发了错误,如果我通过代码发送完全相同的请求而不是我通过邮递员发送的请求,则不会发生错误。

网址是: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发送POST请求时有所不同,我无法弄清楚是什么。

  

“\ r \ n \ r \ n。:: Pagina de Errores   ::。\ r \ n \ r \ n \ r \ n \ r \ nBODY   {字体样式:正常;字体大小:10PT;字体家庭:宋体,Arial字体,黑体,无衬线;} \ r \ NH1   {font-size:16pt; color:Navy;} \ r \ nA {color:Navy;} \ r \ n.msg   {字体风格:粗体;字体大小:14pt;} \ r \ n.error   {字体风格:粗体;字体大小:14pt;颜色:红;} \ r \ n.datos   {font-size:12pt;} \ r \ n.soluc {font-size:12pt;} \ r \ n \ r \ n \ r \ nLaplicación   ha retornado el siguiente problema:\ r \ n

\ r \ n \ r \ n \ r \ n \ r \ n \ n \ r \nAcciónarealizar:\ r \ n \ r \ n \ r \ n或者赞成使用nuevamente   Realizarlaoperación,si el problema persiste,avisar a   nuestro 网站管理员   \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n通常难以联系\ xF3n usuarios。\ r \ n \ r \ n \ r \ n \ r \ n \ r \ n \ r \ n \ r \ n \ r \ n \ n(函数(){var   f5_cspm = {f5_p: 'NEHEKPGFEEIGMFMPAJJJKDPGKDEIIJJIDBONLBJECPDLCCOBKCPONGDHNEIJOKPPCGMBMAGEAADECGEHHJAAAPLKAANKMODHPLFBCJKHMMCPOAKONNKGFELHONBMHBIO',setCharAt:功能(STR,索引,CHR){如果(索引> str.length-1)返回   海峡;回报   str.substr(0,索引)+ CHR + str.substr(索引+ 1);},get_byte:功能(STR,i)的{VAR   S =(I / 16)| 0; I =(I&安培; 15); S = S * 32;返回((str.charCodeAt第(i + 16 + S)-65)<< 4)|(STR。 charCodeAt(I + S)-65);},set_byte:功能(STR,I,b){风险   S =(I / 16)| 0; I =(I&安培; 15); S = S * 32; STR = f5_cspm.setCharAt(STR,第(i + 16 + S),使用String.fromCharCode((B个→4 )65)); STR = f5_cspm.setCharAt(STR中,(i + S),使用String.fromCharCode((b&安培; 15)65));返回   STR;},set_latency:功能(STR,等待时间){延迟=延迟&安培; 0xFFFF的; STR = f5_cspm.set_byte(STR,40,(延迟>> 8)); STR = f5_cspm.set_byte(STR,41,(延迟&安培; 0xff的)); STR = f5_cspm.set_byte(STR,35,2);返回   海峡;},wait_perf_data:函数(){尝试{VAR   WP = window.performance.timing;若(wp.loadEventEnd大于0){风险   RES = wp.loadEventEnd-wp.navigationStart;如果(RES< 60001){风险   cookie_val = f5_cspm.set_latency(f5_cspm.f5_p,RES); window.document.cookie = 'f5avr1032272937aaaaaaaaaaaaaaaa =' + encodeURIComponent方法(cookie_val)+ ';路径= /';} \ nreturn;}} \ ncatch(ERR){返回; } \ nsetTimeout(f5_cspm.wait_perf_data,100);返回;},去:函数(){VAR   块= window.document.cookie.split(/ \ S *; \ S * /);对于(VAR   I = 0; I“

1 个答案:

答案 0 :(得分:0)

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

解决方案是使用:

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

而不是Post.new

的代码