Python-Requests,从字符串中提取URL参数

给了

我正在使用这个功能强大的库requests来维护python 2和3的兼容性并简化我的应用程序请求管理。

我有一种情况,我需要解析一个URL并替换它的参数之一。例如:

http://example.com?param1=a&token=TOKEN_TO_REPLACE&param2=c

我想得到这个:

http://example.com?param1=a&token=NEW_TOKEN&param2=c

有了urllibI,我可以这样实现:

from urllib.parse import urlparse
from urllib.parse import parse_qs
from urllib.parse import urlencode

url = 'http://example.com?param1=a&token=TOKEN_TO_REPLACE&param2=c'

o = urlparse(url)
query = parse_qs(o.query)
if query.get('token'):
    query['token'] = ['NEW_TOKEN', ]
    new_query = urlencode(query, doseq=True)
    url.split('?')[0] + '?' + new_query

>>> http://example.com?param2=c&param1=a&token=NEW_TOKEN

您如何使用该requests实现相同目的

马丁·彼得斯(Martijn Pieters)

您不能requests为此使用如果传递参数的Python结构,则库将构建此类URL,但不会提供任何工具来解析它们。那不是项目的目标。

坚持使用urllib.parse方法来解析参数。一旦有了字典或键值元组列表,只需将其传递requests给构建URL即可:

try:
    # Python 3
    from urllib.parse import urlparse, parse_qs
except ImportError:
    # Python 2
    from urlparse import urlparse, parse_qs

o = urlparse(url)
query = parse_qs(o.query)
# extract the URL without query parameters
url = o._replace(query=None).geturl()

if 'token' in query:
    query['token'] = 'NEW_TOKEN'

requests.get(url, params=query)

您可以同时在Python 2和3中获得urlparseparse_qs函数,所有要做的就是在遇到异常时调整导入位置。

Python 3演示(无导入异常保护)演示了已构建的URL:

>>> from urllib.parse import urlparse, parse_qs
>>> url = "http://httpbin.org/get?token=TOKEN_TO_REPLACE&param2=c"
>>> o = urlparse(url)
>>> query = parse_qs(o.query)
>>> url = o._replace(query=None).geturl()
>>> if 'token' in query:
...     query['token'] = 'NEW_TOKEN'
... 
>>> response = requests.get(url, params=query)
>>> print(response.text)
{
  "args": {
    "param2": "c", 
    "token": "NEW_TOKEN"
  }, 
  "headers": {
    "Accept": "*/*", 
    "Accept-Encoding": "gzip, deflate", 
    "Host": "httpbin.org", 
    "User-Agent": "python-requests/2.5.1 CPython/3.4.2 Darwin/14.1.0"
  }, 
  "origin": "188.29.165.245", 
  "url": "http://httpbin.org/get?token=NEW_TOKEN&param2=c"
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何从Python中的字符串中提取id参数?

来自分类Dev

从字符串中提取python对象

来自分类Dev

在python中提取子字符串

来自分类Dev

从字符串中提取python对象

来自分类Dev

Python 从字符串中提取数据

来自分类Dev

从字符串中提取子字符串,python

来自分类Dev

使用AWS Lambda EVENT中的python从字符串中提取参数化数据

来自分类Dev

在python中,如何从字符串中提取某些字符?

来自分类Dev

从HTML字符串中提取值(PYTHON)

来自分类Dev

从python中的字符串中提取英语单词

来自分类Dev

在Python中从字符串中提取数字

来自分类Dev

Python-使用RegEx从字符串中提取模式

来自分类Dev

Python:从文本中提取星号字符串

来自分类Dev

如何从JSON字符串中提取python数据帧

来自分类Dev

从字符串python中提取小时和分钟

来自分类Dev

最Python的方式从字符串中提取数

来自分类Dev

Python从数据框列中提取未知字符串

来自分类Dev

从python中的字符串中提取列表

来自分类Dev

从Python中的字符串中提取坐标

来自分类Dev

在python中提取部分匹配的字符串

来自分类Dev

在python中提取字符串的特定部分

来自分类Dev

使用Python从字符串中提取2位整数

来自分类Dev

从字符串熊猫python中提取值?

来自分类Dev

使用Python从字符串中提取整数

来自分类Dev

使用Python从XML字符串中提取数据

来自分类Dev

如何从python列表中提取字符串?

来自分类Dev

使用Python从字符串中提取IP

来自分类Dev

从python中的字符串集中提取变量

来自分类Dev

从python字符串中提取某些单词