一个curl命令的python写法

获取响应数据,状态码,dns解析时间,连接时间,总请求时间,curl命令可以这样写:

[root@localhost ~]# echo -n '{"data":';curl -s 'http://apis.haoservice.com/weather' -w ', "http_code":%{http_code}, "dns":%{time_namelookup}, "connect":%{time_connect}, "total":%{time_total}}'
{"data":{"error_code":10001,"reason":"错误的请求KEY","result":null}, "http_code":200, "dns":0.050, "connect":0.079, "total":0.150}

用python如何实现类似功能?

阅读 18.6k
3 个回答

使用 pycurl
先 pip install pycurl
然后执行以下脚本即可,兼容 Python 2.7 和 Python 3

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import os,sys
import time
import sys
import pycurl

class joincontents:
    def __init__(self):
        self.contents = ''
    def callback(self,curl):
        self.contents = self.contents + curl.decode('utf-8')

def curlurl(url):
    t = joincontents()
    c = pycurl.Curl()
    c.setopt(pycurl.WRITEFUNCTION,t.callback)
    c.setopt(pycurl.ENCODING, 'gzip')
    c.setopt(pycurl.URL,url)
    c.perform()
    NAMELOOKUP_TIME =  c.getinfo(c.NAMELOOKUP_TIME)
    CONNECT_TIME =  c.getinfo(c.CONNECT_TIME)
    PRETRANSFER_TIME =   c.getinfo(c.PRETRANSFER_TIME)
    STARTTRANSFER_TIME = c.getinfo(c.STARTTRANSFER_TIME)
    TOTAL_TIME = c.getinfo(c.TOTAL_TIME)
    HTTP_CODE =  c.getinfo(c.HTTP_CODE)
    SIZE_DOWNLOAD =  c.getinfo(c.SIZE_DOWNLOAD)
    HEADER_SIZE = c.getinfo(c.HEADER_SIZE)
    SPEED_DOWNLOAD=c.getinfo(c.SPEED_DOWNLOAD)
    print("HTTP状态码:%s" %(HTTP_CODE))
    print("DNS解析时间:%.2f ms"%(NAMELOOKUP_TIME*1000))
    print("建立连接时间:%.2f ms" %(CONNECT_TIME*1000))
    print("准备传输时间:%.2f ms" %(PRETRANSFER_TIME*1000))
    print("传输开始时间:%.2f ms" %(STARTTRANSFER_TIME*1000))
    print("传输结束总时间:%.2f ms" %(TOTAL_TIME*1000))
    print("下载数据包大小:%d bytes/s" %(SIZE_DOWNLOAD))
    print("HTTP头部大小:%d byte" %(HEADER_SIZE))
    print("平均下载速度:%d bytes/s" %(SPEED_DOWNLOAD))

if __name__ == '__main__':
    url = sys.argv[1]
    curlurl(url)

Subprocess.Popen('curl ...')

requests模块

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题