我使用github3.py在每次调用迭代器时传递etag参数,例如:
user.iter_starred(etag='97ba89b5c009e5530f108a06606f3e2c')以避免消耗我的速率限制和执行conditional request。但不管怎样,当我开始迭代时,github3总是执行适当的请求(因此会获取实际数据),将速率限制减少1。
是我做错了什么,还是有个bug?
发布于 2014-03-29 02:14:02
从我自己的实验来看,这似乎和预期的一样:
>>> import github3
>>> u = github3.user('sigmavirus24')
>>> u
<User [sigmavirus24:Ian Cordasco]>
>>> i = u.iter_starred()
>>> i
<GitHubIterator [-1, /users/sigmavirus24/starred]>
>>> next(i)
<Repository [functional-koans/clojure-koans]>
>>> i.etag
'"1aeaaa7a249610c52ba0363009afcab9"'
>>> next(u.iter_starred(etag=i.etag))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "github3/structs.py", line 103, in next
return self.__next__()
File "github3/structs.py", line 90, in __next__
return next(self.__i__)
StopIteration我们的示例之间的区别在于,您的etag值是'97ba89b5c009e5530f108a06606f3e2c',而与我的etag值相当的是'"97ba89b5c009e5530f108a06606f3e2c"'。因为这个值被放在头中,所以我认为头应该是:
If-None-Match: "97ba89b5c009e5530f108a06606f3e2c"而不是:
If-None-Match: 97ba89b5c009e5530f108a06606f3e2c这就是你要发送的内容。
我只是检查了一下,这就是问题所在。库的工作情况与预期一致。传递etag值的方式是错误的。它需要用双引号将值引起来(例如,'"97ba89b5c009e5530f108a06606f3e2c"')才能正常工作。
https://stackoverflow.com/questions/22695151
复制相似问题