facebook graph api 報錯SSLError(1, u'[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:661)')

來源:互聯網
上載者:User

標籤:urllib   hunk   apt   body   reason   max   param   assert   value   

使用facebook graph api,報錯如下

一開始以為是https認證驗證失敗,查了一下午源碼,沒有看到問題,於是把Python27\lib\site-packages\requests\adapters.py檔案的如下位置異常處理注釋掉了,看看異常到底從哪來的

    def send(self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None):        """Sends PreparedRequest object. Returns Response object.        :param request: The :class:`PreparedRequest <PreparedRequest>` being sent.        :param stream: (optional) Whether to stream the request content.        :param timeout: (optional) How long to wait for the server to send            data before giving up, as a float, or a :ref:`(connect timeout,            read timeout) <timeouts>` tuple.        :type timeout: float or tuple or urllib3 Timeout object        :param verify: (optional) Either a boolean, in which case it controls whether            we verify the server‘s TLS certificate, or a string, in which case it            must be a path to a CA bundle to use        :param cert: (optional) Any user-provided SSL certificate to be trusted.        :param proxies: (optional) The proxies dictionary to apply to the request.        :rtype: requests.Response        """        conn = self.get_connection(request.url, proxies)        self.cert_verify(conn, request.url, verify, cert)        url = self.request_url(request, proxies)        self.add_headers(request)        chunked = not (request.body is None or ‘Content-Length‘ in request.headers)        if isinstance(timeout, tuple):            try:                connect, read = timeout                timeout = TimeoutSauce(connect=connect, read=read)            except ValueError as e:                # this may raise a string formatting error.                err = ("Invalid timeout {0}. Pass a (connect, read) "                       "timeout tuple, or a single float to set "                       "both timeouts to the same value".format(timeout))                raise ValueError(err)        elif isinstance(timeout, TimeoutSauce):            pass        else:            timeout = TimeoutSauce(connect=timeout, read=timeout)        try:            if not chunked:                resp = conn.urlopen(                    method=request.method,                    url=url,                    body=request.body,                    headers=request.headers,                    redirect=False,                    assert_same_host=False,                    preload_content=False,                    decode_content=False,                    retries=self.max_retries,                    timeout=timeout                )            # Send the request.            else:                if hasattr(conn, ‘proxy_pool‘):                    conn = conn.proxy_pool                low_conn = conn._get_conn(timeout=DEFAULT_POOL_TIMEOUT)                try:                    low_conn.putrequest(request.method,                                        url,                                        skip_accept_encoding=True)                    for header, value in request.headers.items():                        low_conn.putheader(header, value)                    low_conn.endheaders()                    for i in request.body:                        low_conn.send(hex(len(i))[2:].encode(‘utf-8‘))                        low_conn.send(b‘\r\n‘)                        low_conn.send(i)                        low_conn.send(b‘\r\n‘)                    low_conn.send(b‘0\r\n\r\n‘)                    # Receive the response from the server                    try:                        # For Python 2.7+ versions, use buffering of HTTP                        # responses                        r = low_conn.getresponse(buffering=True)                    except TypeError:                        # For compatibility with Python 2.6 versions and back                        r = low_conn.getresponse()                    resp = HTTPResponse.from_httplib(                        r,                        pool=conn,                        connection=low_conn,                        preload_content=False,                        decode_content=False                    )                except:                    # If we hit any problems here, clean up the connection.                    # Then, reraise so that we can handle the actual exception.                    low_conn.close()                    raise        except (ProtocolError, socket.error) as err:            raise ConnectionError(err, request=request)        except MaxRetryError as e:            if isinstance(e.reason, ConnectTimeoutError):                # TODO: Remove this in 3.0.0: see #2811                if not isinstance(e.reason, NewConnectionError):                    raise ConnectTimeout(e, request=request)            if isinstance(e.reason, ResponseError):                raise RetryError(e, request=request)            if isinstance(e.reason, _ProxyError):                raise ProxyError(e, request=request)            raise ConnectionError(e, request=request)        except ClosedPoolError as e:            raise ConnectionError(e, request=request)        except _ProxyError as e:            raise ProxyError(e)       # except (_SSLError, _HTTPError) as e:       #     if isinstance(e, _SSLError):       #         raise SSLError(e, request=request)       #     elif isinstance(e, ReadTimeoutError):       #         raise ReadTimeout(e, request=request)       #     else:       #         raise        return self.build_response(request, resp)

注釋後報錯

 

 於是把Python27\lib\site-packages\urllib3\connectionpool.py625到630行注釋掉

報錯

最後估計是proxy的問題,找了一個牆外的伺服器試一下果然好了,不FQ就辦不成事,shit

祝病魔早日戰勝方校長

facebook graph api 報錯SSLError(1, u'[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:661)')

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.