将curl转换为python请求
我正在尝试将以下curl中的工作请求转换为python请求(使用请求) (请注意,我使用了一个假url,但该命令确实适用于真实url) 接收端(在烧瓶中运行)执行以下操作:将curl转换为python请求,python,python-2.7,curl,python-requests,Python,Python 2.7,Curl,Python Requests,我正在尝试将以下curl中的工作请求转换为python请求(使用请求) (请注意,我使用了一个假url,但该命令确实适用于真实url) 接收端(在烧瓶中运行)执行以下操作: @app.route("/match", methods=['POST']) def tagmatch(): query = json.loads(request.form['query']) tags = query.get('tags') ... does stuff ... return
@app.route("/match", methods=['POST'])
def tagmatch():
query = json.loads(request.form['query'])
tags = query.get('tags')
... does stuff ...
return json.dump(stuff)
在Mac OS X(10.9)上运行的curl(7.30)中,上面的命令正确地返回使用标记查询过滤的json列表
我的python脚本如下所示,它返回400个错误请求
import requests
payload = {"tags":["test1", "test2"]}
# also tried payload = 'query={"tags":["test1","test2"]}'
url = 'http://www.test.com/match'
r = requests.post(url, data=payload)
if __name__=='__main__':
print r.text
我觉得我错过了一些小东西,任何帮助都将不胜感激
感谢您使用
请求编写的代码,在Flask中,您似乎没有发布正确的数据格式。有效载荷应如下所示:
payload = {'query': {'tags': ['test1', 'test2']},}
使用requests.post()
时,这似乎不像post数据那样正常。因此,如果您在此处发布了html表单,那么解决问题的方法可能会更清晰。
这里还有另一个类似的问题:从使用请求的代码中,在Flask中,似乎没有发布正确的数据格式。有效载荷应如下所示:
payload = {'query': {'tags': ['test1', 'test2']},}
使用requests.post()
时,这似乎不像post数据那样正常。因此,如果您在此处发布了html表单,那么解决问题的方法可能会更清晰。
这里还有一个类似的问题:您的服务器需要JSON,但您没有发送它。试试这个:
import requests
import json
payload = {'query': json.dumps({"tags":["test1", "test2"]})}
url = 'http://www.test.com/match'
r = requests.post(url, data=payload)
if __name__=='__main__':
print r.text
您的服务器需要JSON,但您没有发送它。试试这个:
import requests
import json
payload = {'query': json.dumps({"tags":["test1", "test2"]})}
url = 'http://www.test.com/match'
r = requests.post(url, data=payload)
if __name__=='__main__':
print r.text
有一个很棒的开源cURL-to-Python请求转换助手。它并不完美,但在很多时候都有帮助。特别是用于转换Chrome“复制为卷曲”命令。如果需要以编程方式进行转换,还有一个问题
在上有一个很棒的开源cURL-to-Python请求转换助手。它并不完美,但在很多时候都有帮助。特别是用于转换Chrome“复制为卷曲”命令。如果需要以编程方式进行转换,还有一个问题
我为Sublime文本编写了一个名为的HTTP客户端插件,其功能之一是转换
如果您使用的是Sublime文本,这可能是您最快、最简单的选择。如果没有,下面是实际处理从cURL到请求转换的代码。它是基于,但有各种改进和错误修复
import argparse
import json
try:
from urllib.parse import urlencode, parse_qsl
except ImportError: # works for Python 2 and 3
from urllib import urlencode
from urlparse import parse_qsl
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument('command')
parser.add_argument('url')
parser.add_argument('-X', '--request', default=None)
parser.add_argument('-d', '--data', default=None)
parser.add_argument('-G', '--get', action='store_true', default=False)
parser.add_argument('-b', '--cookie', default=None)
parser.add_argument('-H', '--header', action='append', default=[])
parser.add_argument('-A', '--user-agent', default=None)
parser.add_argument('--data-binary', default=None)
parser.add_argument('--compressed', action='store_true')
parsed_args = parser.parse_args()
method = 'get'
if parsed_args.request:
method = parsed_args.request
base_indent = ' ' * 4
post_data = parsed_args.data or parsed_args.data_binary or ''
if post_data:
if not parsed_args.request:
method = 'post'
try:
post_data = json.loads(post_data)
except ValueError:
try:
post_data = dict(parse_qsl(post_data))
except:
pass
cookies_dict = {}
if parsed_args.cookie:
cookies = parsed_args.cookie.split(';')
for cookie in cookies:
key, value = cookie.strip().split('=')
cookies_dict[key] = value
data_arg = 'data'
headers_dict = {}
for header in parsed_args.header:
key, value = header.split(':', 1)
if key.lower().strip() == 'content-type' and value.lower().strip() == 'application/json':
data_arg = 'json'
if key.lower() == 'cookie':
cookies = value.split(';')
for cookie in cookies:
key, value = cookie.strip().split('=')
cookies_dict[key] = value
else:
headers_dict[key] = value.strip()
if parsed_args.user_agent:
headers_dict['User-Agent'] = parsed_args.user_agent
qs = ''
if parsed_args.get:
method = 'get'
try:
qs = '?{}'.format(urlencode(post_data))
except:
qs = '?{}'.format(str(post_data))
print(post_data)
post_data = {}
result = """requests.{method}('{url}{qs}',{data}\n{headers},\n{cookies},\n)""".format(
method=method.lower(),
url=parsed_args.url,
qs=qs,
data='\n{}{}={},'.format(base_indent, data_arg, post_data) if post_data else '',
headers='{}headers={}'.format(base_indent, headers_dict),
cookies='{}cookies={}'.format(base_indent, cookies_dict),
)
print(result)
您可以使用此代码创建一个脚本,例如,curl\u to\u request.py
,然后从命令行调用此脚本,如下所示。它适用于Python2和Python3
python curl_to_request.py curl -X POST -d 'key2=value2&key1=value1' 'http://httpbin.org/post'
python curl_to_request.py curl -X POST -H 'Content-Type: application/json' -d '{"key2": "value2", "key1": "value1"}' 'http://httpbin.org/post'
python curl_to_request.py curl -X POST -H 'Content-Type: application/json' -d '[1, 2, 3]' 'http://httpbin.org/post'
python curl_to_request.py curl -X POST -H 'Content-Type: application/json' -d '{"name": "Jimbo", "age": 35, "married": false, "hobbies": ["wiki", "pedia"]}' 'http://httpbin.org/post'
python curl_to_request.py curl -X GET 'http://httpbin.org/get?key2=value2&key1=value1'
python curl_to_request.py curl -X GET -H 'key1: value1' -H 'key2: value2' 'http://httpbin.org/headers'
python curl_to_request.py curl -X GET -b 'key1=value1;key2=value2' 'http://httpbin.org/cookies'
我为Sublime文本编写了一个名为的HTTP客户端插件,它的一个特性是转换
如果您使用的是Sublime文本,这可能是您最快、最简单的选择。如果没有,下面是实际处理从cURL到请求转换的代码。它是基于,但有各种改进和错误修复
import argparse
import json
try:
from urllib.parse import urlencode, parse_qsl
except ImportError: # works for Python 2 and 3
from urllib import urlencode
from urlparse import parse_qsl
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument('command')
parser.add_argument('url')
parser.add_argument('-X', '--request', default=None)
parser.add_argument('-d', '--data', default=None)
parser.add_argument('-G', '--get', action='store_true', default=False)
parser.add_argument('-b', '--cookie', default=None)
parser.add_argument('-H', '--header', action='append', default=[])
parser.add_argument('-A', '--user-agent', default=None)
parser.add_argument('--data-binary', default=None)
parser.add_argument('--compressed', action='store_true')
parsed_args = parser.parse_args()
method = 'get'
if parsed_args.request:
method = parsed_args.request
base_indent = ' ' * 4
post_data = parsed_args.data or parsed_args.data_binary or ''
if post_data:
if not parsed_args.request:
method = 'post'
try:
post_data = json.loads(post_data)
except ValueError:
try:
post_data = dict(parse_qsl(post_data))
except:
pass
cookies_dict = {}
if parsed_args.cookie:
cookies = parsed_args.cookie.split(';')
for cookie in cookies:
key, value = cookie.strip().split('=')
cookies_dict[key] = value
data_arg = 'data'
headers_dict = {}
for header in parsed_args.header:
key, value = header.split(':', 1)
if key.lower().strip() == 'content-type' and value.lower().strip() == 'application/json':
data_arg = 'json'
if key.lower() == 'cookie':
cookies = value.split(';')
for cookie in cookies:
key, value = cookie.strip().split('=')
cookies_dict[key] = value
else:
headers_dict[key] = value.strip()
if parsed_args.user_agent:
headers_dict['User-Agent'] = parsed_args.user_agent
qs = ''
if parsed_args.get:
method = 'get'
try:
qs = '?{}'.format(urlencode(post_data))
except:
qs = '?{}'.format(str(post_data))
print(post_data)
post_data = {}
result = """requests.{method}('{url}{qs}',{data}\n{headers},\n{cookies},\n)""".format(
method=method.lower(),
url=parsed_args.url,
qs=qs,
data='\n{}{}={},'.format(base_indent, data_arg, post_data) if post_data else '',
headers='{}headers={}'.format(base_indent, headers_dict),
cookies='{}cookies={}'.format(base_indent, cookies_dict),
)
print(result)
您可以使用此代码创建一个脚本,例如,curl\u to\u request.py
,然后从命令行调用此脚本,如下所示。它适用于Python2和Python3
python curl_to_request.py curl -X POST -d 'key2=value2&key1=value1' 'http://httpbin.org/post'
python curl_to_request.py curl -X POST -H 'Content-Type: application/json' -d '{"key2": "value2", "key1": "value1"}' 'http://httpbin.org/post'
python curl_to_request.py curl -X POST -H 'Content-Type: application/json' -d '[1, 2, 3]' 'http://httpbin.org/post'
python curl_to_request.py curl -X POST -H 'Content-Type: application/json' -d '{"name": "Jimbo", "age": 35, "married": false, "hobbies": ["wiki", "pedia"]}' 'http://httpbin.org/post'
python curl_to_request.py curl -X GET 'http://httpbin.org/get?key2=value2&key1=value1'
python curl_to_request.py curl -X GET -H 'key1: value1' -H 'key2: value2' 'http://httpbin.org/headers'
python curl_to_request.py curl -X GET -b 'key1=value1;key2=value2' 'http://httpbin.org/cookies'
试试这个:
试试这个:
救命
更简单的办法是:
开放式邮递员
单击左上方的“导入”选项卡
选择“原始文本”选项并粘贴cURL命令
点击导入,您将在邮递员生成器中拥有该命令李>
希望这有帮助
信用证:拯救你的生命
更简单的办法是:
开放式邮递员
单击左上方的“导入”选项卡
选择“原始文本”选项并粘贴cURL命令
点击导入,您将在邮递员生成器中拥有该命令李>
希望这有帮助
信用证:尝试使用图书馆。做它的工作很好。我试过了
u = uncurl.parse(
"curl -X GET 'https://mytesturl.com/' -H 'accept: application/json' -H 'Authorization: 1234567890'")
print(u)
它打印
requests.get("https://mytesturl.com/",
headers={
"Authorization": "1234567890",
"accept": "application/json"
},
cookies={},
)
尽量使用图书馆。做它的工作很好。我试过了
u = uncurl.parse(
"curl -X GET 'https://mytesturl.com/' -H 'accept: application/json' -H 'Authorization: 1234567890'")
print(u)
它打印
requests.get("https://mytesturl.com/",
headers={
"Authorization": "1234567890",
"accept": "application/json"
},
cookies={},
)
payload={'query':'{“tags”:[“test1”,“test2”]}}有效,但flyer为我指出了正确的方向。非常感谢。我没有正确地构建python dict.payload={'query':{“tags”:[“test1”,“test2”]}}工作,但flyer为我指出了正确的方向。非常感谢。我没有正确地构建python dict。在新版本的请求中,还有一个json参数要发布。在新版本的请求中,还有一个json参数要发布。非常感谢!完美的网站!非常有用的提示。非常感谢!完美的网站!非常有用的提示。我只是想对这个例子说声谢谢。它被证明是一种非常有用的技术,可以将其他命令和选项转换为Python。它被证明是一种非常有用的技术,可以将其他命令和选项转换为Python。我们需要一个自动化的解决方案,Postman只用于检查或使用API。我的目的是从“拷贝为卷曲”发送1000个请求,为此,我们需要自动化此过程。救命啊!我们需要一个自动化的解决方案,Postman只用于检查或使用API。我的目的是从“拷贝为卷曲”发送1000个请求,为此,我们需要自动化此过程。救命啊!