说明: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)

python3 get/post/使用代理/自定义header/自定义Cookie的更多相关文章

  1. python3使用requests模块完成get/post/代理/自定义header/自定义Cookie

    一.背景说明 http请求的难易对一门语言来说是很重要的而且是越来越重要,但对于python一是urllib一些写法不太符合人的思维习惯文档也相当难看,二是在python2.x和python3.x中写 ...

  2. nginx反向代理proxy_set_header自定义header头无效

    公司使用nginx作为负载均衡,有时候需要自定义header头发送给后端的真实服务器. 想过去应该是非常的简单的事情. 例子如下: 设置代理服务器ip头   1 proxy_set_header X- ...

  3. 跨域无法获取自定义header的问题

    同域的时候,header里面的参数可以随便自己定义.服务端都是可以获取的. 但是跨域的时候,除了设置 <add name="Access-Control-Allow-Origin&qu ...

  4. Delphi处理Http请求自定义Header

    在HTTP请求中,get方法是默认的,但在URL地址长度是有限的,请求方法能传送的数据也是有限的,一般get方法传递的数据不能大于2KB,当get请求方法传递的数据长度不能满足需求时,就需要采用另一种 ...

  5. dropwizard使用cors支持跨域浏览器取不到自定义header问题

    dropwizard支持cors的配置如下: public void run(Configuration conf, Environment environment) { // Enable CORS ...

  6. nginx 获取自定义header头部信息

    为了排查线上的bug,需要在nginx的日志中,打印客户端上传上来的header头部信息,同时头部信息是自定义的.在尝试多重方案后,找到解决方法: log_format dm '"$remo ...

  7. weex 项目开发(五)自定义 过滤函数 和 混合 及 自定义 Header 组件

    1.自定义  过滤函数 src / filters / index.js /** * 自定义 过滤函数 */ export function host (url) { if (!url) return ...

  8. js ajax设置和获取自定义header信息的方法总结

    目录 1.js ajax 设置自定义header 1.1 方法一: 1.2 方法二: 2.js ajax 获取请求返回的response的header信息 3.js ajax 跨域请求的情况下获取自定 ...

  9. jquery + node 通过 CORS 实现跨域访问,支持cookie和自定义header

    跨域有多种方式,现在的情况看来还是CORS更适合一些,有很多优点,比如浏览器正式支持.支持post.可以控制跨域访问的网站等. 我们来看看node如何实现cors方式的跨域.在网上找到了一些代码,考过 ...

随机推荐

  1. 【Python】【有趣的模块】【sys&time&os】

    [模块] sys.path.append('C:/Users/wangxue1/PycharmProjects/selenium2TestOne') 然后就可以直接import 这个路径下的模块了 [ ...

  2. hdu 1392 Surround the Trees 凸包裸题

    Surround the Trees Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Other ...

  3. Intellij idea创建maven项目并配置tomcat

    今天刷知乎的时候刷到这么一句话 我觉得还是蛮有趣的,形容的也比较到位,正好最近新建maven项目进行了thrift数据的传输,在此做一个记录 首先idea整合了maven,不需要单独下载 新建一个Pr ...

  4. vue自定义错误界面

    方案一: 当输入错误链接错误或者找不到页面,在router里可以定义一个404页面,具体可以这样做:在routes里面这样写: { path:'*', component:error, name:'e ...

  5. [原][osg][osgearth]倾斜摄影1.介绍

    总体介绍: 倾斜摄影就是将拍好的数据,三角网格化再附上贴图. 目前流行处理软件: Street Factory.PIX4DMapper.smart3D 后期开发平台:超图 Skyline smart3 ...

  6. vue中 父子组件的通讯

    1.父组件可以使用 props 把数据传给子组件. 2.子组件可以使用 $emit 触发父组件的自定义事件 实例: 父组件: layout.vue  子组件:logform.vue 子组件: < ...

  7. wow 滚动动画

    1.demo <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset=" ...

  8. Python pymysql 增删改查封装

    关于pymysql 的增删改查,简单做个封装,方便后面使用直接拿来调用即可. 其中 增删改 的处理其实是一致的,本可以使用统一的方法,但是为了明显区分,这里分开来写了. 直接看代码就即可,如下: # ...

  9. Mac python3.6 安装即使用 psycopg2

    学习下python调用PostgreSQL数据库 首先需要安装 psycopg2 python3安装: pip install psycopg2-binary 官网地址: https://pypi.o ...

  10. 解决ios下的微信页面背景音乐无法自动播放问题

    在做各种html5场景页面的时候,插入背景音乐是一个很普遍的需求,我们都知道,ios下的safari是无法自动播放音乐的,以至于现在行程一种认知,ios是没有办法自动播放媒体资源的,这个认知其实是错误 ...