1. Python基础教程
  2. 在SublimeEditor中配置Python环境
  3. Python代码中添加注释
  4. Python中的变量的使用
  5. Python中的数据类型
  6. Python中的关键字
  7. Python字符串操作
  8. Python中的list操作
  9. Python中的Tuple操作
  10. Pythonmax()和min()–在列表或数组中查找最大值和最小值
  11. Python找到最大的N个(前N个)或最小的N个项目
  12. Python读写CSV文件
  13. Python中使用httplib2–HTTPGET和POST示例
  14. Python将tuple开箱为变量或参数
  15. Python开箱Tuple–太多值无法解压
  16. Pythonmultidict示例–将单个键映射到字典中的多个值
  17. PythonOrderedDict–有序字典
  18. Python字典交集–比较两个字典
  19. Python优先级队列示例

学习使用Python httplib2模块。的超文本传输协议(HTTP)是用于分布式,协作,超媒体信息系统的应用协议。HTTP是万维网数据通信的基础。

Python httplib2模块提供了用于通过HTTP访问Web资源的方法。它支持许多功能,例如HTTP和HTTPS,身份验证,缓存,重定向和压缩。

$ service nginx status

* nginx is running

我们在本地主机上运行nginx Web服务器。我们的一些示例将连接到本地运行的nginx服务器上的PHP脚本。

目录

检查httplib2库版本

使用httplib2读取网页

发送HTTP HEAD请求

发送HTTP GET请求

发送HTTP POST请求

发送用户代理信息

将用户名/密码添加到请求

检查httplib2库版本

第一个程序打印库的版本,其版权和文档字符串。

#!/usr/bin/python3

import httplib2

print(httplib2.__version__)

print(httplib2.__copyright__)

print(httplib2.__doc__)

在httplib2.__version__给出的版本httplib2库中,httplib2.__copyright__给出了其版权,以及httplib2.__doc__它的文档字符串。

$ ./version.py

0.8

Copyright 2006, Joe Gregorio

httplib2

A caching http interface that supports ETags and gzip

to conserve bandwidth.

Requires Python 3.0 or later

Changelog:

2009-05-28, Pilgrim: ported to Python 3

2007-08-18, Rick: Modified so it's able to use a socks proxy if needed.

这是示例的示例输出。

使用httplib2读取网页

在下面的示例中,我们展示了如何从名为www.something.com的网站获取HTML内容。

#!/usr/bin/python3

import httplib2

http = httplib2.Http()

content = http.request("[http://www.something.com](http://www.something.com)")[1]

print(content.decode())

使用创建一个HTTP客户端httplib2.HTTP()。使用该request()方法创建一个新的HTTP请求。默认情况下,它是一个GET请求。返回值是响应和内容的元组。

$ ./get_content.py

<html><head><title>Something.</title></head>

<body>Something.</body>

</html>

这是示例的输出。

剥离HTML标签

以下程序获取一个小型网页,并剥离其HTML标签。

#!/usr/bin/python3

import httplib2

import re

http = httplib2.Http()

content = http.request("[http://www.something.com](http://www.something.com)")[1]

stripped = re.sub('<[^<]+?>', '', content.decode())

print(stripped)

一个简单的正则表达式用于剥离HTML标记。请注意,我们正在剥离数据,我们没有对其进行清理。(这是两件事。)

$ ./strip_tags.py

Something.

Something.

该脚本将打印网页的标题和内容。

检查响应状态

响应对象包含status提供响应状态代码的属性。

#!/usr/bin/python3

import httplib2

http = httplib2.Http()

resp = http.request("[http://www.something.com](http://www.something.com)")[0]

print(resp.status)

resp = http.request("[http://www.something.com/news/](http://www.something.com/news/)")[0]

print(resp.status)

我们使用request()方法执行两个HTTP请求,并检查返回的状态。

$ ./get_status.py

200

404

200是成功HTTP请求的标准响应,而404则表明找不到所请求的资源。

发送HTTP HEAD请求

HTTP HEAD方法检索文档标题。标头由字段组成,包括日期,服务器,内容类型或上次修改时间。

#!/usr/bin/python3

import httplib2

http = httplib2.Http()

resp = http.request("[http://www.something.com](http://www.something.com)", "HEAD")[0]

print("Server: " + resp['server'])

print("Last modified: " + resp['last-modified'])

print("Content type: " + resp['content-type'])

print("Content length: " + resp['content-length'])

该示例打印服务器,上次修改时间,内容类型和www.something.com网页的内容长度。

$ ./do_head.py

Server: Apache/2.4.12 (FreeBSD) OpenSSL/1.0.1l-freebsd mod_fastcgi/mod_fastcgi-SNAP-0910052141

Last modified: Mon, 25 Oct 1999 15:36:02 GMT

Content type: text/html

Content length: 72

这是程序的输出。从输出中,我们可以看到该网页是由FreeBSD托管的Apache Web服务器交付的。该文档的最后修改时间为1999年。网页是HTML文档,其长度为72个字节。

发送HTTP GET请求

HTTP GET方法请求指定资源的表示形式。对于此示例,我们还将使用greet.php脚本:

<?php

echo "Hello " . htmlspecialchars($_GET['name']);

?>

在/usr/share/nginx/html/目录内,我们有此greet.php文件。该脚本返回name变量的值,该值是从客户端检索的。

该htmlspecialchars()函数将特殊字符转换为HTML实体;例如&到&amp.。

#!/usr/bin/python3

import httplib2

http = httplib2.Http()

content = http.request("[http://localhost/greet.php?name=Peter](http://localhost/greet.php?name=Peter)",

method="GET")[1]

print(content.decode())

该脚本将带有值的变量发送到服务器上的PHP脚本。该变量直接在URL中指定。

$ ./mget.py

Hello Peter

这是示例的输出。

$ tail -1 /var/log/nginx/access.log

127.0.0.1 - - [21/Aug/2016:17:32:31 +0200] "GET /greet.php?name=Peter HTTP/1.1" 200 42 "-"

"Python-httplib2/0.8 (gzip)"

我们检查了nginx访问日志。

发送HTTP POST请求

POST请求方法请求Web服务器接受并存储请求消息正文中包含的数据。上载文件或提交完整的Web表单时经常使用它。

<?php

echo "Hello " . htmlspecialchars($_POST['name']);

?>

在本地Web服务器上,我们有此target.php文件。它只是将过帐的值打印回客户。

#!/usr/bin/python3

import httplib2

import urllib

http = httplib2.Http()

body = {'name': 'Peter'}

content = http.request("[http://localhost/target.php](http://localhost/target.php)",

method="POST",

headers={'Content-type': 'application/x-www-form-urlencoded'},

body=urllib.parse.urlencode(body) )[1]

print(content.decode())

脚本发送name带有Peter值的键的请求。数据使用urllib.parse.urlencode()方法进行编码,并在请求的正文中发送。

$ ./mpost.py

Hello Peter

这是mpost.py脚本的输出。

$ tail -1 /var/log/nginx/access.log

127.0.0.1 - - [23/Aug/2016:12:21:07 +0200] "POST /target.php HTTP/1.1"

200 37 "-" "Python-httplib2/0.8 (gzip)"

使用POST方法时,不会在请求URL中发送该值。

发送用户代理信息

在本节中,我们指定用户代理的名称。

<?php

echo $_SERVER['HTTP_USER_AGENT'];

?>

在nginx文档根目录下,我们有agent.php文件。它返回用户代理的名称。

#!/usr/bin/python3

import httplib2

http = httplib2.Http()

content = http.request("[http://localhost/agent.php](http://localhost/agent.php)", method="GET",

headers={'user-agent': 'Python script'})[1]

print(content.decode())

该脚本向脚本创建一个简单的GET请求agent.php。在headers字典中,我们指定用户代理。PHP脚本将读取此内容,并将其返回给客户端。

$ ./user_agent.py

Python script

服务器使用我们随请求发送的代理名称进行了响应。

向请求添加用户名/密码

客户端的add_credentials()方法设置用于领域的名称和密码。安全领域是一种用于保护Web应用程序资源的机制。

$ sudo apt-get install apache2-utils

$ sudo htpasswd -c /etc/nginx/.htpasswd user7

New password:

Re-type new password:

Adding password for user user7

我们使用该htpasswd工具创建用于基本HTTP身份验证的用户名和密码。

location /secure {

auth_basic "Restricted Area";

auth_basic_user_file /etc/nginx/.htpasswd;

}

在nginx /etc/nginx/sites-available/default配置文件中,我们创建一个安全页面。领域的名称为“禁区”。

<!DOCTYPE html>

<html lang="en">

<head>

<title>Secure page</title>

</head>

<body>

<p>

This is a secure page.

</p>

</body>

</html>

在/usr/share/nginx/html/secure目录中,我们有上面的HTML文件。

#!/usr/bin/python3

import httplib2

user = 'user7'

passwd = '7user'

http = httplib2.Http()

http.add_credentials(user, passwd)

content = http.request("[http://localhost/secure/](http://localhost/secure/)")[1]

print(content.decode())

该脚本连接到安全网页;它提供访问该页面所需的用户名和密码。

$ ./credentials.py

<!DOCTYPE html>

<html lang="en">

<head>

<title>Secure page</title>

</head>

<body>

<p>

This is a secure page.

</p>

</body>

</html>

使用正确的凭据,脚本将返回受保护的页面。

在本教程中,我们探索了Python httplib2模块。

(Python基础教程之十三)Python中使用httplib2 – HTTP GET和POST示例的更多相关文章

  1. (Python基础教程之八)Python中的list操作

    Python基础教程 在SublimeEditor中配置Python环境 Python代码中添加注释 Python中的变量的使用 Python中的数据类型 Python中的关键字 Python字符串操 ...

  2. 用python写网路爬虫 PDF高清完整版免费下载 Python基础教程免费电子书 python入门书籍免费下载

    <用python写网路爬虫PDF免费下载>PDF书籍下载 内容简介 作为一种便捷地收集网上信息并从中抽取出可用信息的方式,网络爬虫技术变得越来越有用.使用Python这样的简单编程语言,你 ...

  3. python基础教程001_安装python

    1.安装python Windows http://www.python.org下载python安装包 比如python-2.7.12.msi执行安装 安装完毕后,开始->搜索程序跟文件-> ...

  4. 【Python】Python基础教程系列目录

    Python是一个高层次的结合了解释性.编译性.互动性和面向对象的脚本语言. 在现在的工作及开发当中,Python的使用越来越广泛,为了方便大家的学习,Linux大学 特推出了 <Python基 ...

  5. Python 基础教程

    Python 基础教程 Python是一种解释型.面向对象.动态数据类型的高级程序设计语言. Python由Guido van Rossum于1989年底发明,第一个公开发行版发行于1991年. 像P ...

  6. Python基础教程系列目录,最全的Python入门系列教程!

    Python是一个高层次的结合了解释性.编译性.互动性和面向对象的脚本语言. 在现在的工作及开发当中,Python的使用越来越广泛,为了方便大家的学习,Linux大学 特推出了 <Python基 ...

  7. 改写《python基础教程》中的一个例子

    一.前言 初学python,看<python基础教程>,第20章实现了将文本转化成html的功能.由于本人之前有DIY一个markdown转html的算法,所以对这个例子有兴趣.可仔细一看 ...

  8. .Net程序员之Python基础教程学习----列表和元组 [First Day]

    一. 通用序列操作: 其实对于列表,元组 都属于序列化数据,可以通过下表来访问的.下面就来看看序列的基本操作吧. 1.1 索引: 序列中的所有元素的下标是从0开始递增的. 如果索引的长度的是N,那么所 ...

  9. python基础教程笔记—即时标记(详解)

    最近一直在学习python,语法部分差不多看完了,想写一写python基础教程后面的第一个项目.因为我在网上看到的别人的博客讲解都并不是特别详细,仅仅是贴一下代码,书上内容照搬一下,对于当时刚学习py ...

随机推荐

  1. CentOS 使用中问题记录

    ⚠️使用yum提示Error: rpmdb open failed的解决方案 清除原rpmdb文件,这一步可能不用操作,直接进行第2步 # rm -f /var/lib/rpm/__db.* 重建rp ...

  2. 负载均衡服务之HAProxy基础配置(三)

    前文我们聊到了haproxy的代理配置段中比较常用的配置指令的用法以及说明,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/12770930.html:今天我们来 ...

  3. 前端JS—显示赋值(一)

    一:js代码必须位于<script>js代码</script> 把js代码放到<body>元素的地步,可以改善显示速度 二:js显示数据 使用 window.ale ...

  4. maven过滤配置文件

    第一种方式, 解决maven打包时,会编译特定文件导致文件不可用maven打包时,过滤不编译文件类型 <plugin>    <groupId>org.apache.maven ...

  5. 使用nodejs + wecharty打造你的个人微信机器人

    开源地址:https://github.com/isnl/wechat-robot 注: 从2017年6月下旬开始,使用基于web版微信接入方案存在大概率的被限制登陆的可能性. 主要表现为:无法登陆W ...

  6. C++编程入门--No.6

    题目:用*号输出字母C的图案. 程序分析:可先用'*'号在纸上写出字母C,再分行输出. #include <bits/stdc++.h> using namespace std; int ...

  7. Codeforce-CodeCraft-20 (Div. 2)-B. String Modification (找规律+模拟)

    Vasya has a string s of length n. He decides to make the following modification to the string: Pick ...

  8. Python编程求解第1天1分钱之后每天两倍持续一个月的等比数列问题

    一.问题 问题1 场景:如果你未来的丈母娘要求你,第1天给她1分钱,第2天给2分钱,第3天给4分钱,以此类推,每天给前一天的2倍,给1个月(按30天)算就行.问:第30天给多少钱,总共给多少钱? 问题 ...

  9. KNN (K近邻算法) - 识别手写数字

    KNN项目实战——手写数字识别 1. 介绍 k近邻法(k-nearest neighbor, k-NN)是1967年由Cover T和Hart P提出的一种基本分类与回归方法.它的工作原理是:存在一个 ...

  10. 安卓commandlinetools-win-6200805_latest配置

    JDK:1.8.0_251 系统:win10 64bit 问题1 官网下载commandlinetools,解压运行报错 解决方法 打开sdkmanager.bat,修改第17行为set DEFAUL ...