Python:如何设置请求.pos

2024-10-01 17:21:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试以编程方式使用这个工具http://www.idtdna.com/calc/analyzer,这样我就可以批量分析几十个DNA序列。在

在Chrome的开发工具中,我看到当我点击Analyze按钮(在sequence字段中输入一个序列(例如“AACCGGTT”)之后)时,我会发送一个POST请求。在Response选项卡中,我还可以看到我希望收集的响应(例如“MeltTemp”)。所以,在教程(http://docs.python-requests.org/en/latest/user/quickstart/#make-a-request)之后,我把下面的代码片段放在一起,但是它显然不起作用。在

>>> import requests
>>> url = 'http://www.idtdna.com/calc/analyzer/home/analyze'  # from: ChromeDevTools -> Network -> Name: analyze -> tab: Headers -> General -> Request URL
>>> data = {"settings":{"Sequence":"AACCGGTT",  # from: ChromeDevTools -> Network -> Name: analyze -> tab: Headers -> Request Payload
                        "NaConc":50,
                        "MgConc":0,
                        "DNTPsConc":0,
                        "OligoConc":0.25,
                        "NucleotideType":"DNA",
                       }}

>>> r = requests.post(url, data=data)

>>> r.url  # 404 page
u'http://www.idtdna.com/404.aspx?aspxerrorpath=/calc/analyzer/home/analyze'

# I was hoping for something like this that gives me the JSON response (which can be found at
# ChromeDevTools -> Network -> Name: analyze -> tab: Response)
>>> r.some_magical_function()
{"Sequence":"AAC CGG TTG GTT AAT T","NaConc":50,  ... "MeltTemp":45.1, ...}

我错过了什么?在

post请求是否需要更加复杂(使用cookies?会议?如果是,请提供我需要学习的内容(或解决方案:p)

我知道如果网站有针对这种使用的安全措施;如果基本上不可能,那么你建议什么策略?硒?在


Tags: namecomhttpurldatawwwcalcnetwork
1条回答
网友
1楼 · 发布于 2024-10-01 17:21:46
  • 正如niemmi所评论的,实际的url是http://sg.idtdna.com/calc/analyzer/home/analyze
  • 站点需要设置cookie(在使用^{}设置cookie的实际请求之前,您至少需要访问该页面一次)
  • 您需要传递json编码的数据(可以使用json=...参数)

import requests

url = 'http://sg.idtdna.com/calc/analyzer/home/analyze'
data = {
    'settings': {
        'Sequence': 'AACCGGTT',
        'NaConc': 50,
        'MgConc': 0,
        'DNTPsConc': 0,
        'OligoConc': 0.25,
        'NucleotideType': 'DNA',
    }
}

s = requests.Session()
s.get('http://sg.idtdna.com/calc/analyzer')  # to set cookies
r = s.post(url, json=data)
print(r.json())

更新

根据位置不同,不会发生重定向。在这种情况下,请使用www.idtdna.com,而不是{}。在

相关问题 更多 >

    热门问题