python http应用

1、使用代理
>>> import urllib.request

>>> proxies = {‘http’: ‘
http://proxy.example.com:8080/‘}

>>> opener = urllib.request.FancyURLopener(proxies)

>>> opener.addhead(“Accept”, “sound/basic”)

>>> f = opener.open(“
http://www.python.org“)

>>> f.read().decode(‘utf-8’)

2、GET请求

import urllib.request

f = urllib.request.urlopen(‘
http://www.pcb.org/pcb?a=b&c=d‘)

dir(f)

import urllib.request

req = urllib.request.Request(‘
http://www.example.com/‘)

req.add_header(‘Referer’, ‘
http://www.python.org/‘)

r = urllib.request.urlopen(req)

对于GET请求,已经完备了

3、POST请求

import http.client, urllib.parse

params = urllib.parse.urlencode({‘spam’: 1, ‘eggs’: 2, ‘bacon’: 0})

headers = {“Content-type”: “application/x-www-form-urlencoded”,

           “Accept”: “text/plain”}

conn = http.client.HTTPConnection(“musi-cal.mojam.com:80”)

conn.request(“POST”, “/cgi-bin/query”, params, headers)

response = conn.getresponse()

请求包是这样:

POST /cgi-bin/query HTTP/1.1
Host: musi-cal.mojam.com
Accept-Encoding: identity
Content-Length: 21
Content-type: application/x-www-form-urlencoded
Accept: text/plain

eggs=2&bacon=0&spam=1

自由添加body:

headers = {“Content-type”: “application/x-www-form-urlencoded”,

           “Accept”: “text/plain”}

conn = http.client.HTTPConnection(“musi-cal.mojam.com:80”)

conn.request(“POST”, “/cgi-bin/query”, “a=c&c=d\np=f”, headers)

另一种格式:

conn = http.client.HTTPConnection(“aos.isd.com”)

header = {“Content-Type”:”multipart/form-data; boundary=123456789″}

content = “””–123456789

Content-Disposition: form-data; name=value1

versionList

–123456789

Content-Disposition: form-data; name=value2

7792 –123456789–

“””

conn.request(“POST”, “/cc2/cc/ccInterface.api.php”, content, header)

==========================================================

multipart/form-data方式 ( RFC1867 ) HTTP协议大致如下,红色是额外加上的:

POST /msb/WebForm1.aspx HTTP/1.1
Connection: Keep-Alive
Content-Length: 458
Content-Type: multipart/form-data; boundary=—————————–7d6bb34502ce[上传方式,边界]
Accept: */*
Expect: 100-continue
Host: localhost
Referer: http://mtv.1ting.com/
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)

——————————-7d6bb34502ce[边界这里开头多了2个中划线]
Content-Disposition: form-data; name=”key1[表单域名]

ffffffffffffffffffffffffffffffffffffffffffffffffffffff[表单域值]
——————————-7d6bb34502ce[边界这里开头多了2个中划线]
Content-Disposition: form-data; name=”file[文件类型表单域名]“; filename=”d:\1.rar[文件名]
Content-Type: application/x-msdownload[文件类型]

[文件内容]
——————————-7d6bb34502ce–[最后一个边界,开头和结尾都多了2个中划线

———————————————————

import http.client, urllib.parse

def buidcontent(boundary):
    jsonObject = ”'{
        “appkey” : “y6Vrn2xQvq”,
        “sealType” : 1,
        “docName” : “test.pdf”,
        “rules” : [
            {
                “type” : 1,
                “signetId” : “87b1ec0f-38f6-47ea-8e47-7f001b4ed657”,
                “offset” : [1668, 2828],
                “page” : 0
            }
            ]
        }”’
    content = ‘–‘ + boundary 
    content += “\r\n”
    content += ‘Content-Disposition: form-data; name=”json”‘
    content += “\r\n”
    content += ‘Content-Type: text/plain;charset=UTF-8’
    content += “\r\n\r\n”
    content += jsonObject
    content += “\r\n\r\n” 
    
    content += ‘–‘ + boundary
    content += “\r\n”
    content += ‘Content-Disposition: form-data; name=”file”;filename=”%s”‘ % “test.pdf”
    content += “\r\n”
    content += ‘Content-Type: application/octet-stream’
    content += “\r\n”
    content += ‘Content-Transfer-Encoding: binary’
    content += “\r\n\r\n”
    content = content.encode(“utf-8”)
    fd = open(“dzqz.pdf”, ‘rb’)    

    content += fd.read()

    fd.close()
    content += b”\r\n\r\n”
    end = ‘–‘ + boundary + “–\r\n”

    end = end.encode(“utf-8”)
    content += end
    
    return content
        

def testDzqz():
    conn = http.client.HTTPConnection(“10.123.25.22:8080”)
    boundary = “dzqz”
    header = {“Content-Type” : “multipart/form-data; boundary=%s” % boundary}    
    content = buidcontent(boundary)
    conn.request(“POST”, “/smp/gateway/signature”, content, header)
    response = conn.getresponse()
    print(response.code)
    print(response.headers)
    print(response.read().decode(‘utf8’))
    
if __name__ == “__main__”:
    testDzqz()

    原文作者:chrispancb
    原文地址: https://blog.csdn.net/chrispancb/article/details/74332572
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞