干草!我是新来的,所以让我描述清楚我的问题,请忽略错误。我在一个页面上提出请求,这页文字是关于js的。漫不经心地,它是paytm payemnt通过UPI响应的页面。
当我执行请求时,响应是{'POLL_STATUS':"STOP_POLLING"}
但问题是,在浏览器使用加载的html提供另一个响应时,reqest给出了这个响应。
我尝试了每一种方式,就像停止重定向和打印原始内容一样,什么都不管用。我只是觉得可能是urllib,post请求可能是工作,但我不知道它的用途。
有谁能告诉我如何得到浏览器给出的准确的html响应吗?
注意:请不要提供selenium的答案,因为这个问题在我的脚本中。注1:友好的答案已见效。
for i in range(0,15):
resp_check_transaction=self.s.post("https://secure.website.in/theia/upi/transactionStatus?MID="+str(Merchant_ID)+"&ORDER_ID="+str(ORDER_ID),headers=check_transaction(str(ORDER_ID)),data=check_transaction_payload(Merchant_ID,ORDER_ID,TRANSID,CASHIERID))
print(resp_check_transaction.text)
resp_check_transaction=resp_check_transaction.json()
if resp_check_transaction['POLL_STATUS']=="STOP_POLLING":
print("Breaking looop")
break
time.sleep(4)
self.clear_header()
parrms={
"MID": str(Merchant_ID),
"ORDER_ID": str(ORDER_ID)
}
resp_transaction_pass=requests.post("https://secure.website.in/theia/upi/transactionStatus",headers=transaction_pass(str(ORDER_ID)),data=transaction_pass_payload(CASHIERID,UPISTATUSURL,Merchant_ID,ORDER_ID,TRANSID,TXN_AMOUNT),params=parrms,allow_redirects=True)
print("Printing response")
print(resp_transaction_pass.text)
print(resp_transaction_pass.content)而在网络浏览器中,它显示的是状态代码: 302暂时移动到银行响应的银行响应。:(
发布于 2021-12-10 07:04:17
关于302状态码
您提到web浏览器是响应请求发送302状态代码的。用最简单的术语来说,302状态代码只是web服务器的一种说法:“嘿,我知道你在寻找什么,但它实际上位于另一个URL上。”
基本上,所有现代浏览器和HTTP库(比如Python)都会自动遵循302重定向,就像将请求发送到新的Requests一样。(浏览器的开发工具可能会显示发生了302次重定向,但就JavaScript而言,它只是得到了正常的200响应)。
如果您真的想查看您的Python是否接收到302状态,可以通过将allow_redirects选项设置为False来实现,但这意味着您必须手动从新的False获取内容。
import requests
r1 = requests.get('https://httpstat.us/302', allow_redirects=False)
r2 = requests.get('https://httpstat.us/302', allow_redirects=True)
print('No redirects:', r1.status_code) # 302
print('Redirects on:', r2.status_code) # 200 (status code of page it redirects to)注意,默认情况下,allow_redirects已经设置为True,我只是想使这个示例更冗长一些,因此差别是显而易见的。
那么为什么响应内容是不同的呢?
因此,尽管浏览器和Requests库都自动跟随302个重定向--它们得到的响应仍然不同--但是您没有共享浏览器请求或响应的任何屏幕快照,所以我只能给出一些有根据的猜测,但归根结底是,您的Python代码发出的请求与web浏览器加载的JavaScript有所不同。
有些事情需要考虑:
Requests库的用户代理字符串来阻止逆向工程尝试。幸运的是,所有这些差异都可以很容易地通过一些print语句和浏览器的开发工具来检查:p。
https://stackoverflow.com/questions/70274446
复制相似问题