【问题标题】:How to post request body in Python directly?如何直接在 Python 中发布请求正文?
【发布时间】:2023-03-18 23:14:01
【问题描述】:

我有以下关于 POST 请求的详细信息

1)The URL: "http://kuexams.org/get_results"
2)Request body: "htno=001111505&ecode=kuBA3_Supply_Dec_2013".

我是通过分析 HTTP 流量得到的。然后我找到了这个站点,您可以在其中指定这些值并返回响应。 https://requestable.pieterhordijk.com/sSd7o

我需要知道如何制作类似于the site 所做的事情。只需将请求正文发布到 URL 并返回数据进行解析。

P.S:我已经尝试了多种方法来发布到这个网站http://kuexams.org/results/3GKZ-D_QBHLWXrg7lZ2IGoKBI7lGfpSK37GNoykJ8k5UerNGYn21FN6w_R5XZ8IQVUHRb8ZYVwq-zN4BhIjusQ,,/ugresults/ug 这就是我累的地方。它使用了不同的方法,但失败得很惨。

import mechanize
import cookielib
import urllib
import logging
import sys
import re

br = mechanize.Browser()
cj = cookielib.LWPCookieJar()
br.set_cookiejar(cj)
br.set_handle_equiv(True)
br.set_handle_gzip(True)
br.set_handle_redirect(True)
br.set_handle_referer(True)
br.set_handle_robots(False)
br.set_handle_refresh(mechanize._http.HTTPRefreshProcessor(), max_time=3)
br.addheaders = [('User-agent', 'Firefox')]


r = br.open('http://kuexams.org/results/06JZ4SYmTV97s4oROGuLYglPFH3XxJKAunIilJkDBV0gBxSU6YVJ_kXRL0UZb3cIjz9aFdnkYaE-T_S3ubaXPg,,/ugresults/ug')

scrape = r.read()
#print(scrape)
pattern = re.compile('=5&code=(.{5})\'')

img = pattern.findall(scrape) 
print(img)
imgstr = str()
imgstr = img[0]
print(imgstr)

br.select_form("appForm")

br.form["htno"] ='001111441'

br.form["entered_captcha"] = imgstr

response = br.submit()

print response.read()

br.back()

【问题讨论】:

  • 你有什么问题?你没有问过它..
  • @aIKid 我下面的代码不起作用,也没有必要。我希望能够像我提到的网站一样使用 URL 和请求正文发布(由另一个 Stack 交换成员制作,用于测试 POST)。
  • 你得到了什么样的回应?是否引发异常?
  • @aIKid 我没有得到结果。它只是给了我原始网站,就好像什么都没有发布一样。除了为什么要通过所有这些无意义的搜索 capatcha 脚本。我得到了直接的 POST 链接。当我在“requestable.pieterhordijk.com/sSd7o”(这是一个用于测试 POST 和其他 HTTP 请求的站点)上对其进行测试时,它可以完美运行。但我自己不知道如何实现。

标签: python html post http-post


【解决方案1】:

我可以看到没有使用任何 cookie 或验证码详细信息的发布请求。它仅在客户端实现,因此无需存储 cookie 或获取验证码,因此此代码将为您工作。 使用请求它很酷且易于使用。

import requests

url='http://kuexams.org/get_results'

payload={'htno': '001111441', 'ecode': 'kuBA2_Supply_Dec_2013'}

headers={"User-Agent": "Some Cool Thing"}

r=requests.post(url,headers=headers,data=payload)

print r.content

请注意,服务器不接受默认的用户代理请求,所以我添加了自定义的,没有它不会接受 POST 请求或可能会出现禁止错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-18
    • 2021-06-17
    • 2020-12-13
    • 1970-01-01
    • 2020-06-18
    • 1970-01-01
    相关资源
    最近更新 更多