Python 将 curl 命令转换为 urllib.request
Python convert curl command to urllib.request
我想将我的 curl 转换为 urllib.request 命令到 python,curl 命令:
curl -v -i -X POST http://api.textart.io/img2txt.json --form image=@path/to/dir/file.jpg
我的代码:
import json
from urllib import request, parse
data = parse.urlencode({
"image": open("path/to/dir/file.jpg", "rb")
}).encode()
req = request.Request("http://api.textart.io/img2txt.json")
req.add_header('User-Agent', 'Mozilla/5.0')
response = json.loads(request.urlopen(req, data).read())
response = json.dumps(response, indent=4)
print(response)
回复:
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>500 Internal Server Error</title>
</head><body>
<h1>Internal Server Error</h1>
<p>The server encountered an internal error or
misconfiguration and was unable to complete
your request.</p>
<p>Please contact the server administrator at
webmaster@api.textart.io to inform them of the time this error occurred,
and the actions you performed just before this error.</p>
<p>More information about this error may be available
in the server error log.</p>
</body></html>
虽然 curl 有效,请帮忙。
如果您要使用模块 requests
而不是 urllib
,那么您可以使用门户 http://curlconverter.com 来转换它。但有时它可能会创建错误的代码。
如果您使用程序 postman 来测试网页,那么它还具有生成不同语言代码的功能 - 它应该具有为 Python 中的 urllib
生成代码的功能.
您还可以使用门户 https://httpbin.org(和 url httpbin.org/post)来测试 curl
和 python
中的请求。门户发回它在请求中获得的所有数据,您可以比较在 curl
和 python
.
中发送的内容
但我在 Linux 本地程序上使用 netcat 来模拟服务器并查看 raw
请求。
nc -l localhost 8080
然后用 http://localhost:8080
测试 curl
和 urllib
并创建了应该与 api.textart.io
一起使用的代码
from urllib import request
import json
file_data = open("path/image.jpg", "rb").read()
BOUNDARY = b'------------------------360768b014779354'
data = [
b'--' + BOUNDARY,
b'Content-Disposition: form-data; name="image"; filename="image.jpg"',
b'Content-Type: image/jpeg',
b'',
file_data,
b'--' + BOUNDARY + b'--',
b'',
]
data = b'\r\n'.join(data)
#print(data)
url = "http://api.textart.io/img2txt.json"
#url = "https://httpbin.org/post"
#url = 'http://localhost:8080'
req = request.Request(url)
req.add_header("Content-Type", 'multipart/form-data; boundary={}'.format(BOUNDARY.decode())),
#req.add_header("Content-Length", str(len(data)))
#req.add_header("Accept", "*/*")
response = json.loads(request.urlopen(req, data).read())
response = json.dumps(response, indent=4)
print(response)
我想将我的 curl 转换为 urllib.request 命令到 python,curl 命令:
curl -v -i -X POST http://api.textart.io/img2txt.json --form image=@path/to/dir/file.jpg
我的代码:
import json
from urllib import request, parse
data = parse.urlencode({
"image": open("path/to/dir/file.jpg", "rb")
}).encode()
req = request.Request("http://api.textart.io/img2txt.json")
req.add_header('User-Agent', 'Mozilla/5.0')
response = json.loads(request.urlopen(req, data).read())
response = json.dumps(response, indent=4)
print(response)
回复:
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>500 Internal Server Error</title>
</head><body>
<h1>Internal Server Error</h1>
<p>The server encountered an internal error or
misconfiguration and was unable to complete
your request.</p>
<p>Please contact the server administrator at
webmaster@api.textart.io to inform them of the time this error occurred,
and the actions you performed just before this error.</p>
<p>More information about this error may be available
in the server error log.</p>
</body></html>
虽然 curl 有效,请帮忙。
如果您要使用模块 requests
而不是 urllib
,那么您可以使用门户 http://curlconverter.com 来转换它。但有时它可能会创建错误的代码。
如果您使用程序 postman 来测试网页,那么它还具有生成不同语言代码的功能 - 它应该具有为 Python 中的 urllib
生成代码的功能.
您还可以使用门户 https://httpbin.org(和 url httpbin.org/post)来测试 curl
和 python
中的请求。门户发回它在请求中获得的所有数据,您可以比较在 curl
和 python
.
但我在 Linux 本地程序上使用 netcat 来模拟服务器并查看 raw
请求。
nc -l localhost 8080
然后用 http://localhost:8080
curl
和 urllib
并创建了应该与 api.textart.io
from urllib import request
import json
file_data = open("path/image.jpg", "rb").read()
BOUNDARY = b'------------------------360768b014779354'
data = [
b'--' + BOUNDARY,
b'Content-Disposition: form-data; name="image"; filename="image.jpg"',
b'Content-Type: image/jpeg',
b'',
file_data,
b'--' + BOUNDARY + b'--',
b'',
]
data = b'\r\n'.join(data)
#print(data)
url = "http://api.textart.io/img2txt.json"
#url = "https://httpbin.org/post"
#url = 'http://localhost:8080'
req = request.Request(url)
req.add_header("Content-Type", 'multipart/form-data; boundary={}'.format(BOUNDARY.decode())),
#req.add_header("Content-Length", str(len(data)))
#req.add_header("Accept", "*/*")
response = json.loads(request.urlopen(req, data).read())
response = json.dumps(response, indent=4)
print(response)