Python requests.get()VS Powershell Invoke-WebRequest -Uri

时间:2016-12-17 18:15:41

标签: python powershell

我正在测量我网站的页面加载时间。我使用了Python requests.get(url)方法,偶尔会给我这么大的响应时间(12秒以上)。但是当我尝试使用PowerShell Invoke-WebRequest -Uri时,它永远不会超过1秒。

我想知道这两种方法之间的区别是什么,最好的方法是什么。

的Python:

r = requests.get(url)
r.elapsed.total_seconds() 

的PowerShell:

$result1 = Measure-Command { $request = Invoke-WebRequest -Uri $url }
$result1.TotalMilliseconds

2 个答案:

答案 0 :(得分:1)

我确实尝试过google.com

import sys, os, re, shlex, urllib, subprocess 

cmd = 'dig -x %s @192.1.1.1' % sys.argv[1]

proc = subprocess.Popen(shlex.split(cmd), stdout=subprocess.PIPE)
out, err = proc.communicate()

sys.stdout = open("/tmp/test.txt", "w")
print(out)
sys.stdout.close()

635是结果

我尝试了一种不同的执行时间方法:

$result1 = Measure-Command { $request = Invoke-WebRequest -Uri "http://google.com" }
$result1.TotalMilliseconds

结果:0.4560821056365967秒

我尝试使用print(r.elapsed.total_seconds())也有类似的结果

import requests
import time
start = time.time()
r = requests.get("http://google.com")
print(" %s seconds" % (time.time() - start))

我没有发现你所说的剧烈差异,并且在随后的执行中,这些值非常相似

答案 1 :(得分:0)

  • 在Windows中有一个称为dns缓存的东西,当您模拟对URL的调用时,powershell将使用它们。

  • 示例:假设x.company.com是您要命中的URL。当您使用invoke-webrequest时,它将解析dns缓存中的地址。

  • 刷新缓存并查看区别。您会在同一时间看到Invoke-webrequest和python的request.get(url)