说明: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. 由设置body线性背景色引发的问题-----当声明文档类型时,对body设置线性背景色,页面背景色无法整体线性过渡

    问题:当声明文档类型时,对body设置线性背景色,页面背景色无法整体线性过渡 不声明文档类型时,对body设置线性背景色 <HTML> <head> <meta char ...

  2. mysql利用navicat导出表结构和表中数据

    LZ在网上搜索了要如何导出mysql的表结构和表中数据,发现有的方法不好用 记录一下好用的方式: 用navicat打开DB链接后,点击数据库,右击选择转储SQL文件,然后选择结构和数据: 之后弹出新的 ...

  3. Data Structure 基本概念

    数据(data) 描述客观事物的数值 数据项(data item) 具有原子性,不可分割的最小单位 数据元素(data element)集合的个体,通常由很多数据组成 数据对象(data object ...

  4. Ubuntu16 源码方式安装postgresql数据库

    依赖工具库 注意:默认用户名是postgres,以下命令是Ubuntu操作系统中的命令 make GCC Zlib 安装命令:sudo apt-get install zlib1g-dev注意有些软件 ...

  5. leecode第十六题(最接近的三数之和)

    class Solution { public: void quick_order(vector<int>& num, int star, int en)//快排 { int st ...

  6. Android 通过 JNI 访问 Java 字段和方法调用

    在前面的两篇文章中,介绍了 Android 通过 JNI 进行基础类型.字符串和数组的相关操作,并描述了 Java 和 Native 在类型和签名之间的转换关系. 有了之前那些基础,就可以实现 Jav ...

  7. windows版 Java调用人脸识别离线sdk

    最近因工作需求在java-web服务中调用人脸识别离线sdk,主要通过JNA及JNI技术,但均未调试通过,JNA调用时出现以下异常,一直未解决,求大佬指点,导常信息如下: in BaiduFaceAp ...

  8. 清理SuperMap iclient 三维插件的缓存批处理

    在windows任何位置,新建一个文本文件,将下面内容复制到文本文件中并保存,然后修改该文本文件后缀为.bat,鼠标点击执行即可完成清理工作~ @echo off title 清理三维缓存 @echo ...

  9. Codeforces 931F - Teodor is not a liar!

    931F - Teodor is not a liar! 思路: 最长上升子序列 先差分数组染色 如果存在一个点,被所有区间包含,那么这张图一定是山峰状,如下图: 那么只要分别从前和从后找一个最长非严 ...

  10. winfrom datagridview ,picturebox,显示图片,以及删除问题

     private void write_listview(DataSet ds)         {             DataTable dt = ds.Tables[0];          ...