赞
踩
https://github.com/PyGithub/PyGithub
github/__init__.py
中
from github.MainClass import Github
github/MainClass.py
中
from Requester import Requester
在github/Requester.py
使用将账号密码base64,然后加入到Header中进行Basic 认证。
API:
search_repositories():使用GET /search/repositories
search_users()
search_issues():使用GET /search/issues
search_code():使用GET /search/code
search_commits()
搜索代码,实际发出请求的是:
github/MainClass.py
中的search_code()
最后的return语句:
github/PaginatedList.py
中,只有手动调用get_page()时才发出了HTTP请求。
看看requestJsonAndCheck()
具体怎么实现的:
可见,其实其Requester也是通过requests这个库来实现的。
最终通过__requestRaw()
实现。
ContentFile 有这些属性:
content、decoded_content、download_url、encoding、git_url、html_url、license、name、path、repository、sha、size、type、url
参考:
再看一下token是如何传递的:
github/Requester.py
中,
token是拼接之后放到了这个请求头中。
最终调用HTTP请求的是这个方法:
__requestEncode
def __requestEncode(self, cnx, verb, url, parameters, requestHeaders, input, encode): # 限定HTTP请求动词只有这几个 assert verb in ["HEAD", "GET", "POST", "PATCH", "PUT", "DELETE"] if parameters is None: parameters = dict() if requestHeaders is None: requestHeaders = dict() #进行认证 self.__authenticate(url, requestHeaders, parameters) requestHeaders["User-Agent"] = self.__userAgent if self.__apiPreview: requestHeaders["Accept"] = "application/vnd.github.moondragon+json" url = self.__makeAbsoluteUrl(url) url = self.__addParametersToUrl(url, parameters) encoded_input = None if input is not None: requestHeaders["Content-Type"], encoded_input = encode(input) self.NEW_DEBUG_FRAME(requestHeaders) # 发出请求 status, responseHeaders, output = self.__requestRaw(cnx, verb, url, requestHeaders, encoded_input) if Consts.headerRateRemaining in responseHeaders and Consts.headerRateLimit in responseHeaders: self.rate_limiting = (int(responseHeaders[Consts.headerRateRemaining]), int(responseHeaders[Consts.headerRateLimit])) if Consts.headerRateReset in responseHeaders: self.rate_limiting_resettime = int(responseHeaders[Consts.headerRateReset]) if Consts.headerOAuthScopes in responseHeaders: self.oauth_scopes = responseHeaders[Consts.headerOAuthScopes].split(", ") self.DEBUG_ON_RESPONSE(status, responseHeaders, output) return status, responseHeaders, output
在__authenticate()
方法中,会判断若__authorizationHeader
不为None,则将请求头设置为 __authorizationHeader
。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。