我还没有找到任何人使用Python通过CAS的例子。希望肯尼斯·雷茨(Kenneth Reitz)可以向我展示“请求”如何使这一过程变得容易...
基本上,我无法通过CAS登录...从不对我的Python尝试进行身份验证。(请注意,我定义了两个url。...url1是主网页,url2是指向CAS站点的重定向链接...我已经知道了重定向链接,因此很简单)。
我的理解是,我要做的就是捕获CAS作为cookie发送给我的JsessionId,然后获取该cookie,然后将jsessionid附加回url上,并使用我的用户名/密码作为POST发送回CAS )。但是,此脚本每次都会失败。
CAS专家可以帮助我吗?我根本无法弄清楚为什么它不能对我进行身份验证。
import sys
import requests
my_config = {'verbose': sys.stderr }
url1 = 'http://agnes:8080'
url2 = 'https://agnes:8543/irisCAS/login?service=http%3A%2F%2Fagnes%3A8080%2FirisRootWeb%2Fj_spring_cas_security_check'
response = requests.get(url1, headers=headers, verify=False)
print response.cookies
cookies = response.cookies
response = requests.post(url2, headers=headers, verify=False, config=my_config, params=cookies, auth=('username', 'password'))
print response.status_code
print response.content
Run Code Online (Sandbox Code Playgroud)
输出..注意如何将jsessionId附加到url2,所以很好。.....我认为。
{'JSESSIONID': 'EEE38382A1D5AAACA58E12433BDA0BFF'}
2012-05-18T15:04:17.668601 POST https://agnes:8543/irisCAS/login?service=http%3A%2F%2Fagnes%3A8080%2FirisRootWeb%2Fj_spring_cas_security_check&JSESSIONID=EEE38382A1D5AAACA58E12433BDA0BFF
200
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
<head>
...
...
</script>
<form id="fm1" class="fm-v clearfix" action="/irisCAS/login;jsessionid=30ABCAC79FEA5B48399053939530A608?service=http%3A%2F%2Fagnes%3A8080%2FirisRootWeb%2Fj_spring_cas_security_check&JSESSIONID=B6235434D64C5E2E6C063BA3E1C1AC43" method="post">
<div class="box fl-panel" id="login">
<!-- Congratulations on bringing …Run Code Online (Sandbox Code Playgroud) 我正在尝试将csv文件上传到此站点。但是,我遇到了一些问题,我认为这源于不正确mimetype(也许)。
我正在尝试通过 手动发布文件urllib2,因此我的代码如下所示:
import urllib\nimport urllib2\nimport mimetools, mimetypes\nimport os, stat\nfrom cStringIO import StringIO\n\n#============================\n# Note: I found this recipe online. I can\'t remember where exactly though.. \n#=============================\n\nclass Callable:\n def __init__(self, anycallable):\n self.__call__ = anycallable\n\n# Controls how sequences are uncoded. If true, elements may be given multiple values by\n# assigning a sequence.\ndoseq = 1\n\nclass MultipartPostHandler(urllib2.BaseHandler):\n handler_order = urllib2.HTTPHandler.handler_order - 10 # needs to run first\n\n def http_request(self, request):\n data = …Run Code Online (Sandbox Code Playgroud) 我正在使用 urllib3,我想查看发送的标头。
我在文档中找到了这个,但它没有打印标题:
urllib3.add_stderr_logger(1)
Run Code Online (Sandbox Code Playgroud)
有没有办法做到这一点?
我注意到有几种方法可以为Web报废提供http连接.我不确定某些是更近期和最新的编码方式,还是它们只是具有不同优点和缺点的不同模块.更具体地说,我试图了解以下两种方法之间的区别,你会推荐什么?
1)使用urllib3:
http = PoolManager()
r = http.urlopen('GET', url, preload_content=False)
soup = BeautifulSoup(r, "html.parser")
Run Code Online (Sandbox Code Playgroud)
2)使用请求
html = requests.get(url).content
soup = BeautifulSoup(html, "html5lib")
Run Code Online (Sandbox Code Playgroud)
是什么将这两个选项区分开来,除了它们需要导入不同模块的简单事实?
我正在使用 urllib3 爬网。示例代码:
from urllib3 import PoolManager
pool = PoolManager()
response = pool.request("GET", url)
Run Code Online (Sandbox Code Playgroud)
问题是我可能会偶然发现 url 是一个非常大的文件的下载,我并不介意下载它。
我发现了这个问题 - Link - 它建议使用urlliband urlopen。我不想两次联系服务器。
我想将文件大小限制为 25MB。有没有办法做到这一点urllib3?
我正在尝试阅读网站的内容,但我得到一个空的字节对象b''.
import urllib3
from urllib3 import PoolManager
urllib3.disable_warnings()
https = PoolManager()
r = https.request('GET', 'https://minemen.club/leaderboards/practice/')
print(r.status)
print(r.read())
Run Code Online (Sandbox Code Playgroud)
当我在网络浏览器中打开 URL 时,我看到了该网站,结果r.status为 200(成功)。
为什么不r.read()返回内容?
我正在编写一个程序,可以将文件下载到1Gb以下的任何地方.现在我正在使用请求包来下载文件,虽然它有效(我认为它有时会超时)但它很慢.我已经看到了一些使用urllib2的多部分下载示例的示例,但我正在寻找一种方法来使用urllib3或请求,如果该包具有该功能.
我想使用urllib3库来通过库发出 POST 请求,requests因为它具有连接池和重试等功能。但我找不到以下POST请求的替代品。
import requests
result = requests.post("http://myhost:8000/api/v1/edges", json={'node_id1':"VLTTKeV-ixhcGgq53", 'node_id2':"VLTTKeV-ixhcGgq51", 'type': 1 })
Run Code Online (Sandbox Code Playgroud)
这在requests库中运行良好,但我无法将其转换为urllib3请求。我试过
import json
import urllib3
urllib3.PoolManager().request("POST","http://myhost:8000/api/v1/edges", body=json.dumps(dict(json={'node_id1':"VLTTKeV-ixhcGgq53", 'node_id2':"VLTTKeV-ixhcGgq51", 'type': 1 })))
Run Code Online (Sandbox Code Playgroud)
问题是json在POST请求中使用as 键传递原始 json 数据。
我试图使用以下代码段。我使用的是Python 3,而urllib3不是urllib2。我想知道如何更换这一部分fh = urllib2.urlopen('http://people.ku.edu/~gbohling/geostats/WGTutorial.zip')
data = fh.read()在urllib3。谢谢。
clusterfile = 'ZoneA.dat'
if not os.path.isfile(clusterfile):
fh = urllib2.urlopen('http://people.ku.edu/~gbohling/geostats/WGTutorial.zip')
data = fh.read()
fobj = StringIO.StringIO(data)
myzip = zipfile.ZipFile(fobj,'r')
myzip.extract(clusterfile)
fobj.close()
fh.close()
Run Code Online (Sandbox Code Playgroud) 我正在使用 Python urllib3+ 中的 Retry 模块来处理requests第 3 方 API 出现零星错误的情况。我遇到的一个问题是,如果重试一直失败,我会得到一个exceptions.MaxRetryError并且永远不会看到响应是什么。如果有来自服务器的有价值的调试数据怎么办?
有没有办法在会抛出的情况下仍然得到响应MaxRetryError?
下面是我的代码
from requests.packages.urllib3.util.retry import Retry
from requests.adapters import HTTPAdapter
def req_with_retry(retries=3, backoff_factor=0.5, status_forcelist=(400, 404, 500, 502, 504,), method_whitelist=frozenset(['POST', 'HEAD', 'TRACE', 'GET', 'PUT', 'OPTIONS', 'DELETE']), session=None,):
'''
this returns a session that functions like the requests module but with retries built it for certain status codes
'''
session = session or requests.Session()
retry = Retry(
total=retries,
read=retries,
connect=retries,
backoff_factor=backoff_factor,
status_forcelist=status_forcelist,
method_whitelist=method_whitelist
)
adapter …Run Code Online (Sandbox Code Playgroud) urllib3 ×10
python ×6
urllib2 ×3
http ×2
python-3.x ×2
urllib ×2
bs4 ×1
cas ×1
download ×1
python-2.7 ×1
python-3.3 ×1