用Python请求保持网站开放?

时间:2016-02-07 20:41:27

标签: python http header python-requests

我只想弄清楚如何保持与网站的连接打开。在我获得URL之后,我尝试使用while循环,但我可以看到它已经不再连接到网站了。如何导航到URL,并在运行循环时保持该URL打开整个时间?我只是希望它永远循环,也许从网站打印一些数据。这是我试过的代码,感谢您的帮助!

import requests
import time

url = 'https://www.google.com'

s = requests.session()

headers = {'user-agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36'}

r = s.get(url, headers=headers)

while True:
    print str(r)
    time.sleep(10)

2 个答案:

答案 0 :(得分:2)

你问题的目的是什么?你打算通过打开一个连接来实现什么目标?

我怀疑你可以永远保持开放,但你所做的事情在某种程度上应该有效。

使用import requests import time url = 'https://www.google.com' s = requests.session() while True: r = s.get(url) print(r.text) time.sleep(10) 会话应确保正确设置HTTP keepalive选项,并且远程服务器应在为每个HTTP请求提供服务后保持TCP连接处于打开状态。如果您停止发送请求,则服务器最终将超时连接并关闭它。

重要的是,您必须继续提出请求,例如:

void Main()
{
   // we defin the IComparer class to define Sort Order
   var sortOrder = new SortOrder("dfbcae");

   var testOrder = "abcdeeabc".ToCharArray();
   // sort the array using Array.Sort
   Array.Sort(testOrder, sortOrder);

   Console.WriteLine(testOrder.ToString());

}
public class SortOrder : IComparer
{
   string sortOrder;

  public SortOrder(string sortOrder)
  {
    this.sortOrder = sortOrder; 
  }

public int Compare(object obj1, object obj2)
{
    var obj1Index = sortOrder.IndexOf((char)obj1);
    var obj2Index = sortOrder.IndexOf((char)obj2);

    if(obj1Index == -1 || obj2Index == -1)
    {
        throw new Exception("character not found");
    }

    if(obj1Index > obj2Index)
    {
        return 1;
    }
    else if (obj1Index == obj2Index)
    {
        return 0;
    }
    else
    {
        return -1;
    }
}

}

此代码应保持连接打开,并允许通过同一TCP连接发送多个请求。

答案 1 :(得分:0)

因此,一般情况下,当您发送HTTP请求时会发生什么,您创建了一个连接到服务器的套接字,并且您发送了一个请求并且全部是这样的(好吧,实际上没有但你明白了):)。 然后服务器将回复你的状态代码(https://en.wikipedia.org/wiki/List_of_HTTP_status_codes),所以也许你想监视一个服务器,看看它是否开启,持续多长时间等等。然后你可以这样做:

true

非常简单,您只需每2秒发送一次请求。然后检查状态代码是否正确。我希望这会有所帮助。