Python requests close request

Python-Requests закрывает http соединение

Мне было интересно, как вы закрываете связь с Requests (python-requests.org)?

С httplib это HTTPConnection.close() , но как мне сделать то же самое с запросами?

r = requests.post("https://stream.twitter.com/1/statuses/filter.json", data=, auth=('username', 'passwd')) for line in r.iter_lines(): if line: self.mongo['db'].tweets.insert(json.loads(line)) 

7 ответов

Как уже обсуждалось здесь, там действительно это не такая вещь, как HTTP-соединение, и то, что httplib называет HTTPConnection, на самом деле является базовым TCP-соединением, которое вообще мало что знает о ваших запросах. Запрашивает тезисы, и вы никогда этого не увидите.

Последняя версия Requests фактически поддерживает соединение TCP после вашего запроса. Если вы хотите, чтобы ваши соединения TCP закрывались, вы можете просто настроить запросы так, чтобы они не использовали keep-alive.

s = requests.session() s.config['keep_alive'] = False 

Я думаю, что более надежный способ закрытия соединения — явно указать серверу, чтобы он закрывался следующим образом: соответствует спецификации HTTP:

HTTP / 1.1 определяет параметр «закрыть» соединение для отправителя, чтобы сигнализировать о том, что соединение будет закрыто после завершения ответа. Например,

в полях заголовка запроса или ответа указывает, что соединение НЕ ДОЛЖНО считаться «постоянным» (раздел 8.1) после завершения текущего запроса / ответа.

Заголовок Connection: close добавляется к фактическому запросу:

r = requests.post(url=url, data=body, headers=) 

Я пришел к этому вопросу, пытаясь решить «too many open files» error , но я использую requests.session() в своем коде. Несколько поисков позже, и я нашел ответ на Python запрашивает документацию, в которой предлагается использовать блок with , чтобы сеанс закрывался, даже если есть необработанные исключения:

with requests.Session() as s: s.get('http://google.com') 

Если вы не используете Session, вы можете сделать то же самое:

Чтобы удалить заголовок «keep-alive» в запросах, я просто создал его из объекта Request, а затем отправил с помощью Session

headers = < 'Host' : '1.2.3.4', 'User-Agent' : 'Test client (x86_64-pc-linux-gnu 7.16.3)', 'Accept' : '*/*', 'Accept-Encoding' : 'deflate, gzip', 'Accept-Language' : 'it_IT' >url = "https://stream.twitter.com/1/statuses/filter.json" #r = requests.get(url, headers = headers) #this triggers keep-alive: True s = requests.Session() r = requests.Request('GET', url, headers) 

Пожалуйста, используйте response.close() для закрытия, чтобы избежать ошибки «слишком много открытых файлов»

r = requests.post("https://stream.twitter.com/1/statuses/filter.json", data=, auth=('username', 'passwd')) . r.close() 
res = requests.get(, timeout=10).content requests.session().close() 

По запросам 1.X соединение доступно для объекта ответа:

r = requests.post("https://stream.twitter.com/1/statuses/filter.json", data=, auth=('username', 'passwd')) r.connection.close() 

Источник

Python-Requests закрывает http соединение

Мне было интересно, как вы закрываете связь с Requests (python-requests.org)?

С httplib его HTTPConnection.close() , но как мне сделать то же самое с запросами?

 r = requests.post("https://stream.twitter.com/1/statuses/filter.json", data=, auth=('username', 'passwd')) for line in r.iter_lines(): if line: self.mongo['db'].tweets.insert(json.loads(line)) 

8 ответов

Как обсуждалось здесь, на самом деле не существует такой вещи, как HTTP-соединение, и то, что httplib называет HTTPConnection, на самом деле является базовым TCP-соединением, которое вообще мало что знает о ваших запросах. Запрашивает тезисы, и вы никогда этого не увидите.

Самая новая версия Requests фактически поддерживает соединение TCP после вашего запроса. Если вы хотите, чтобы ваши соединения TCP закрывались, вы можете просто настроить запросы так, чтобы они не использовали keep-alive.

s = requests.session() s.config['keep_alive'] = False 

Я думаю, что более надежным способом закрытия соединения является явное указание серверу закрыть его способом, соответствующим спецификации HTTP:

HTTP / 1.1 определяет опцию «закрыть» соединение для отправителя, чтобы сообщить, что соединение будет закрыто после завершения ответа. Например,

в полях заголовка запроса или ответа указывается, что соединение НЕ СЛЕДУЕТ считать «постоянным» (раздел 8.1) после завершения текущего запроса / ответа.

Connection: close заголовок добавляется к фактическому запросу:

r = requests.post(url=url, data=body, headers=) 

Я пришел к этому вопросу, пытаясь решить «too many open files» error , но я использую requests.session() в моем коде. Несколько поисков позже, и я нашел ответ на Документацию по запросам Python, в которой предлагается использовать with заблокировать так, чтобы сессия была закрыта, даже если есть необработанные исключения:

with requests.Session() as s: s.get('http://google.com') 

Если вы не используете Session, вы можете сделать то же самое: http://docs.python-requests.org/en/master/api/

with requests.get('http://httpbin.org/get', stream=True) as r: # Do something 

Пожалуйста, используйте response.close() закрыть, чтобы избежать ошибки «слишком много открытых файлов»

r = requests.post("https://stream.twitter.com/1/statuses/filter.json", data=, auth=('username', 'passwd')) . r.close() 

По запросам 1.X соединение доступно для объекта ответа:

r = requests.post("https://stream.twitter.com/1/statuses/filter.json", data=, auth=('username', 'passwd')) r.connection.close() 
res = requests.get(, timeout=10).content requests.session().close() 

По последним запросам (2.25.1), requests. закроет соединение по умолчанию

with sessions.Session() as session: return session.request(method=method, url=url, **kwargs) 

Таким образом, если вы используете последнюю версию запросов, нам кажется, что нам не нужно закрывать соединение самостоятельно.

Кроме того, если вам нужно отправить несколько запросов в одном и том же сеансе, лучше использовать requests.Session() вместо того, чтобы открывать / закрывать соединение несколько раз. БЫВШИЙ:

with requests.Session() as s: r = s.get('https://example.org/1/') print(r.text) r = s.get('https://example.org/2/') print(r.text) r = s.get('https://example.org/3/') print(r.text) 

Источник

Response Methods – Python requests

When one makes a request to a URI, it returns a response. This Response object in terms of python is returned by requests.method(), method being – get, post, put, etc. Response is a powerful object with lots of functions and attributes that assist in normalizing data or creating ideal portions of code. For example, response.status_code returns the status code from the headers itself, and one can check if the request was processed successfully or not.
Response object can be used to imply lots of features, methods, and functionalities.
Example :

Python3

Save this file as request.py, and run using below command

Status code 200 indicates that request was made successfully.

Response Methods

Method Description
response.headers response.headers returns a dictionary of response headers.
response.encoding response.encoding returns the encoding used to decode response.content.
response.elapsed response.elapsed returns a timedelta object with the time elapsed from sending the request to the arrival of the response.
response.close() response.close() closes the connection to the server.
response.content response.content returns the content of the response, in bytes.
response.cookies response.cookies returns a CookieJar object with the cookies sent back from the server.
response.history response.history returns a list of response objects holding the history of request (url).
response.is_permanent_redirect response.is_permanent_redirect returns True if the response is the permanent redirected url, otherwise False.
response.is_redirect response.is_redirect returns True if the response was redirected, otherwise False.
response.iter_content() response.iter_content() iterates over the response.content.
response.json() response.json() returns a JSON object of the result (if the result was written in JSON format, if not it raises an error).
response.url response.url returns the URL of the response.
response.text response.text returns the content of the response, in unicode.
response.status_code response.status_code returns a number that indicates the status (200 is OK, 404 is Not Found).
response.request response.request returns the request object that requested this response.
response.reason response.reason returns a text corresponding to the status code.
response.raise_for_status() response.raise_for_status() returns an HTTPError object if an error has occurred during the process.
response.ok response.ok returns True if status_code is less than 200, otherwise False.
response.links response.links returns the header links.

Commonly Used Response Methods

Some methods are most commonly used with response, such as response.json(), response.status_code, response.ok, etc. Requests is mostly used for making http request to APIs(Application Programming Interface). Some of commonly used response methods are discussed here –

response.json()

response.json() returns a JSON object of the result (if the result was written in JSON format, if not it raises an error).

How to use response.json() using Python requests?

To illustrate use of response.json(), let’s ping geeksforgeeks.org. To run this script, you need to have Python and requests installed on your PC.

Источник

Python-запросы закрывают http-соединение

Мне было интересно, как закрыть соединение с запросами (python-requests.org)?

Работы С Нами httplib это HTTPConnection.close() , но как мне сделать то же самое с запросами?

r = requests.post("https://stream.twitter.com/1/statuses/filter.json", data=, auth=('username', 'passwd')) for line in r.iter_lines(): if line: self.mongo['db'].tweets.insert(json.loads(line)) 

Я не думаю, что Requests устанавливает постоянное соединение. нет соединения, которое нужно закрыть. — user849425

@michael, вы получаете постоянный пул соединений бесплатно, если не укажете иное docs.python-requests.org/en/latest/user/advanced/#keep-alive — istruble

@istruble Тогда urllib3 занимается очисткой пула соединений? — user849425

8 ответы

Я думаю, что более надежный способ закрыть соединение — это явно указать серверу, чтобы закрыть его таким образом, совместимый со спецификацией HTTP:

HTTP / 1.1 определяет параметр «закрыть» соединение для отправителя, чтобы сигнализировать о том, что соединение будет закрыто после завершения ответа. Например,

в полях заголовка запроса или ответа указывает, что соединение НЕ ДОЛЖНО считаться «постоянным» (раздел 8.1) после завершения текущего запроса / ответа.

Наблюдения и советы этой статьи мы подготовили на основании опыта команды Connection: close заголовок добавляется к фактическому запросу:

r = requests.post(url=url, data=body, headers=) 

Что такое «тело» в данном случае? просто любой <>? — штифтик

@Brad Это зависит от типа контента, например, если вы хотите отправить application/json, вы можете использовать data=json.dumps(payload), если вы просто хотите отправить обычную полезную нагрузку, закодированную в форме, вы можете использовать data=< "k1":"v1", . >. Подробнее см. здесь: docs.python-requests.org/en/latest/user/quickstart/… — Олег Гриб

Это используется здесь но по какой-то причине кажется, что соединение на самом деле не закрыто — я замечаю, потому что в моей ОС заканчиваются порты — чего не должно происходить имхо, если это соединение закрывается правильно. :/- Стефан Фальк

Я пришел к этому вопросу, чтобы решить «too many open files» error , но я использую requests.session() в моем коде. Несколько поисков спустя, и я нашел ответ на Документация по запросам Python который предлагает использовать with block, чтобы сеанс был закрыт, даже если есть необработанные исключения:

with requests.Session() as s: s.get('http://google.com') 
with requests.get('http://httpbin.org/get', stream=True) as r: # Do something 

Источник

Читайте также:  Sqlite3 python insert into where
Оцените статью