如何将“curl -X POST -T“转换为Python

swvgeqrz  于 2022-11-13  发布在  Python
关注(0)|答案(4)|浏览(188)

如何转换

curl -X POST -T 'sample_data.json' -H "Content-Type: application/json" https://sample_url.com

转换成Python?
具体来说,我如何为请求提供“-T”参数?

2guxujil

2guxujil1#

我相信你可以这样做:

import requests
import json

requests.post('https://sample_url.com', 
    headers = {'Content-type': 'application/json'}, 
    data = json.loads(open('sample_data.json').read())
}

您可以查看requests页面以了解更多详细信息。
或者,要展示一个完全自包含的示例,而不必从文件中加载json,您可以执行以下操作:

import requests
requests.post('https://httpbin.org/post', data = {'key':'value'})
<Response [200]>

请注意,来自请求文档:
在请求中使用json参数会将标头中的Content-Type更改为application/json
因此,您可以改为执行以下操作:

r = requests.post(url, json=payload)
vlju58qv

vlju58qv2#

curl -X POST -T 'sample_data.json' \
     -H 'Content-Type: application/json' \
     https://sample_url.com/

有效地等效于

curl -X POST \
     -H 'Content-Type: application/json' \
     -d "$(cat sample_data.json)" \
     https://sample_url.com/sample_data.json

所以使用requests,它将是

with open('sample_data.json') as fh:
    response = requests.post(
        "https://sample_url.com/sample_data.json",
        data=fh.read(), 
        header={'Content-Type': 'application/json'}
    )
bfrts1fy

bfrts1fy3#

有几种方法可以做到这一点。但最好的方法是使用requests库。它还不是标准库的一部分(还没有),但它使HTTP请求变得非常直接。

$ pip install requests

$ conda install requests

然后

import json

import requests

url = r"https://sample_url.com"
with open("sample_data.json", "r") as fh:
    data = json.load(fh)
requests.post(url=url, data=data)
wgx48brx

wgx48brx4#

最好的方法是使用Python Requests库-https://2.python-requests.org/en/master/

import Requests
import json
result = requests.post(URL,json=json.loads(open('sample_data.json').read()))

requests库本身就理解如何发送JSON数据
在页面的这一部分,还有更多关于如何使用表单编码的有效负载发布消息的示例-https://2.python-requests.org/en/master/user/quickstart/#more-complicated-post-requests
为了能够执行其他动词,您只需要更改请求的函数-

for a GET, requests.get(url)
for a PUT, requests.put(url,data=DATA) or requests.put(url,json=JSON)
for a DELETE, requests.delete(url)

和/或其他信息。

相关问题