首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >请求不像web浏览器提供的那样加载内容

请求不像web浏览器提供的那样加载内容
EN

Stack Overflow用户
提问于 2021-12-08 11:44:37
回答 1查看 343关注 0票数 -1

干草!我是新来的,所以让我描述清楚我的问题,请忽略错误。我在一个页面上提出请求,这页文字是关于js的。漫不经心地,它是paytm payemnt通过UPI响应的页面。

当我执行请求时,响应是{'POLL_STATUS':"STOP_POLLING"}

但问题是,在浏览器使用加载的html提供另一个响应时,reqest给出了这个响应。

我尝试了每一种方式,就像停止重定向和打印原始内容一样,什么都不管用。我只是觉得可能是urllib,post请求可能是工作,但我不知道它的用途。

有谁能告诉我如何得到浏览器给出的准确的html响应吗?

注意:请不要提供selenium的答案,因为这个问题在我的脚本中。注1:友好的答案已见效。

代码语言:javascript
复制
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暂时移动到银行响应的银行响应。:(

EN

回答 1

Stack Overflow用户

发布于 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获取内容。

代码语言:javascript
复制
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有所不同。

有些事情需要考虑:

  • 您确定您使用的是正确的HTTP方法吗?浏览器是否也发出了POST请求?如果是这样的话,您确定请求的正文与web browser?
  • Perhaps发送的相同/相同的格式吗?浏览器有一个与请求一起发送的会话cookie (注意,这通常不是在JS中明确表示,而是automatically).
  • Alternatively ),JS可能在HTTP头中包含一些API键/凭据(这在JS).
  • Although不太可能的中应该是显式可见的,它可能是您的任何API‘API’)。我们试图查询通过阻塞Requests库的用户代理字符串来阻止逆向工程尝试。

幸运的是,所有这些差异都可以很容易地通过一些print语句和浏览器的开发工具来检查:p。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70274446

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档