Python:如何设置requests.post

时间:2016-03-15 06:52:19

标签: python python-requests

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

在Chrome的开发者工具中偷看,我看到我在点击Analyze按钮时发送POST请求(在Sequence字段中输入序列(例如“AACCGGTT”)之后)。在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, ...}

我错过了什么?

帖子请求是否需要更复杂(使用cookies?session ??)?如果是这样,请提供我需要学习的内容(或解决方案:p)

我理解网站是否有防范这种用法的保护措施;如果基本上不可能,那么你建议采取什么策略?硒?

1 个答案:

答案 0 :(得分:2)

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代替sg.idtdna.com