zoukankan      html  css  js  c++  java
  • python3 get/post/使用代理/自定义header/自定义Cookie

    说明:urllib发送http请求并不是很人性化,更推荐使用在urllib基础上封装的、python2和python3都兼容的requests模块,移步查看

    一、get请求

    get请求就是在构造Request对象时,只传入url参数

    更多的教程发送get请求的写法直接是不构造Request对象而直接urllib.request.urlopen(url),但为了与后边post和header的统一推荐还是构造Request。

    import urllib.request
    
    url_request="http://10.10.6.92/Pages/login.htm"
    
    request_obj=urllib.request.Request(url=url_request) response_obj
    =urllib.request.urlopen(request_obj) html_code=response_obj.read().decode('utf-8') print(html_code)

    二、post请求

    post请求与get的区别,是在构造Request对象时除了传入url参数还要传入data参数

    不用怀疑,真的加上data,发送数据时就自动由get方法改为post方法

    当然其实也可以在构造Request时多传入method参数(比如method='POST'),强制使用某种方法;

    不过注意这里的method参数只是生硬地用该参数的值去替换请求动词(比如你设为‘XX’,请求动词就是‘XX’),其他东西不会变的(比如有post_data强传‘GET’,数据还是用POST的形式提交)。

    import urllib.request
    
    url_request="http://10.10.6.92/Pages/login.htm"
    post_data='<?xml version="1.0" encoding="utf-8" ?><request version="1.0" systemType="NVMS-9000" clientType="WEB"><content><userName><![CDATA[admin]]></userName><password>MTIzNDU2</password></content></request>'
    post_data=post_data.encode('utf-8')
    
    request_obj=urllib.request.Request(url=url_request,data=post_data)
    response_obj=urllib.request.urlopen(request_obj)
    html_code=response_obj.read().decode('utf-8')
    print(html_code)

    三、使用代理

    使用代理的关键是下边中间的四行代码

    同样强调使用代理和是get方法,还是post方法,还是使用代理都没有关联

    import urllib.request

    url_request="http://10.10.6.92/Pages/login.htm"

    request_obj=urllib.request.Request(url=url_request)
    request_obj.set_proxy('127.0.0.1:8080','http')
    response_obj=urllib.request.urlopen(request_obj)
    html_code=response_obj.read().decode('utf-8')
    print(html_code)

     python默认发送头部如下,这四个值和自定义头部类似于父类和子类的关系:

    四、自定义header

    自定义header,就是在构造Request对象时多传入headers参数

    header与是get方法还是post方法是没有关联的;也就是说post方法想自定义头部,那么在post的基础方多传入headers参数即可

    import urllib.request
    
    url_request="http://10.10.6.92/Pages/login.htm"
    header_selfdefine={
         'Host':'10.10.6.92',
         'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:59.0) Gecko/20100101 Firefox/59.0',
         'Accept': '*/*',
         'Accept-Language': 'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2',
         'Accept-Encoding': 'gzip, deflate',
         'Referer': 'http://10.10.6.92/Pages/login.htm'
    }
    
    request_obj=urllib.request.Request(url=url_request,headers=header_selfdefine)
    response_obj=urllib.request.urlopen(request_obj)
    html_code=response_obj.read().decode('utf-8')
    print(html_code)

    五、自定义Cookie

    如果使用add_header添加的请求头在header中已经存在,那么header中同一请求头的值将被覆盖;或者叫以add_header的为准。

    import urllib.request
    
    url_request = 'http://10.10.6.92/Pages/login.htm'
    
    request_obj = urllib.request.Request(url=url_request)
    request_obj.add_header('Cookie','username="root", password="toor"')
    response_obj = urllib.request.urlopen(request_obj)
    html_code = response_obj.read().decode('utf-8')
    print(html_code)

  • 相关阅读:
    GhostBSD 3.0RC3,基于GNOME的FreeBSD
    Nagios 3.4.3 发布,企业级监控系统
    Jolokia 1.0.6 发布, JMX远程访问方法
    微软希望开发人员不要使 WebKit 成为新版 IE6
    Kwort Linux 3.5 正式版发布
    EJDB 1.0.24 发布,嵌入式 JSON 数据库引擎
    Pale Moon 15.3 Firefox“苍月”优化版发布
    Galera Load Balancer 0.8.1 发布
    SmartSVN V7.5 正式发布
    PostgresQL建立索引如何避免写数据锁定
  • 原文地址:https://www.cnblogs.com/lsdb/p/9052257.html
Copyright © 2011-2022 走看看