在python中返回curl的http错误代码

在python中返回curl的http错误代码,python,python-2.7,curl,libcurl,Python,Python 2.7,Curl,Libcurl,上面是我的代码,我试图返回curl的http响应代码。所以我尝试了以下选项-w%{http_code} status, output = commands.getstatusoutput("curl -k -v --cookie cookie_name 'URL' -o filename") 当我在python脚本和打印状态下运行它时,不会打印任何内容。 有人能帮我查一下curl返回码吗? 我想尝试这样的场景,比如用户名密码错误,无法获取状态,或者无法访问网络主机,或者内容下载不正确。正如其他

上面是我的代码,我试图返回curl的http响应代码。所以我尝试了以下选项-w%{http_code}

status, output = commands.getstatusoutput("curl -k -v --cookie cookie_name 'URL' -o filename")
当我在python脚本和打印状态下运行它时,不会打印任何内容。 有人能帮我查一下curl返回码吗?
我想尝试这样的场景,比如用户名密码错误,无法获取状态,或者无法访问网络主机,或者内容下载不正确。

正如其他人所建议的,最好使用HTTP进行curl调用。最简单的方法是:

status, output = commands.getstatusoutput("curl -k -v --cookie cookie_name -w %{http_code} 'URL' -o filename")

r.content
包含响应主体,如果需要状态代码,只需使用
r.status\u code

命令即可。getstatusoutput(“cmd”)
相当于
{cmd;}2>&1
即stdout/stderr被合并
curl
将http代码打印到标准输出。您可以使用
子流程。检查\u output
仅获取标准输出:

import requests

data = {
    ...
}
r = requests.post(url, data=data)
print r.content
正如其他人已经说过的,在Python中发出http请求不需要启动子进程:您可以使用
urllib2
pycurl
请求
库,例如:

import shlex
from subprocess import check_output

DEVNULL = open(os.devnull, 'wb', 0)

curl_cmd = "curl -k --cookie ... -w %{http_code} -o filename 'URL'"
http_code = int(check_output(shlex.split(curl_cmd), stderr=DEVNULL))

使用Curl有什么特别的原因吗?直接在Python中执行HTTP请求(使用请求库,甚至内置urllib或httplib)更好、更容易。我不知道具体原因,因为我正在尝试清理一些现有代码。我只知道它是一个https请求。在这种情况下,学习使用一些与http相关的Python包,最容易使用的是
请求
。它将允许您获得状态代码和所有您需要的。感谢您的回复。但我需要使用curl,因为这涉及到cookie传输
import urllib2
from shutil import copyfileobj

url = 'http://httpbin.org/status/418'
# to load cookies from file, you could use cookielib module
request = urllib2.Request(url, headers={'Cookie': 'cookie_name=value'})
try: # both `curl -k` and urllib2 do not verify ssl certificates
    response = urllib2.urlopen(request)
except urllib2.HTTPError as e:
    http_code = e.code
else:
    http_code = response.code
print(http_code)
if http_code == 200: # save to file
    with open('filename', 'wb') as output_file:
        copyfileobj(response, output_file)
response.close()