如果我知道内容将是一个字符串,那么在Python中使用HTTP GET的最快方法是什么?我正在搜索文档中的快速单行,如:
contents = url.get("http://example.com/foo/bar")
Run Code Online (Sandbox Code Playgroud)
但是,所有我能找到使用谷歌是httplib和urllib-我无法找到这些库中的快捷方式.
标准Python 2.5是否具有上述某种形式的快捷方式,还是应该编写函数url_get?
wget或curl.我是Python的新手,我一直在浏览本网站上的问答,以回答我的问题.但是,我是初学者,我发现很难理解一些解决方案.我需要一个非常基本的解决方案
有人可以向我解释一个简单的解决方案:"通过http下载文件"和"将其保存到Windows中的磁盘"吗?
我也不确定如何使用shutil和os模块.
我想下载的文件不到500 MB,是一个.gz存档文件.如果有人可以解释如何提取存档并利用其中的文件,那就太棒了!
这是一个部分解决方案,我从各种答案中总结出来:
import requests
import os
import shutil
global dump
def download_file():
global dump
url = "http://randomsite.com/file.gz"
file = requests.get(url, stream=True)
dump = file.raw
def save_file():
global dump
location = os.path.abspath("D:\folder\file.gz")
with open("file.gz", 'wb') as location:
shutil.copyfileobj(dump, location)
del dump
Run Code Online (Sandbox Code Playgroud)
有人可以指出错误(初学者级别)并解释任何更简单的方法来做到这一点?
谢谢!
我试图输出一个字符串,其中包含字符串的两个单词之间的所有内容:
输入:
"Here is a String"
Run Code Online (Sandbox Code Playgroud)
输出:
"is a"
Run Code Online (Sandbox Code Playgroud)
使用:
sed -n '/Here/,/String/p'
Run Code Online (Sandbox Code Playgroud)
包括端点,但我不想包含它们.
虽然这个问题是相似于GitHub的最新版本,它实际上是不同的-它是关于一个链接,意思是"最新版本的下载文件本身".
GitHub提供了一个"最新"URL,可以重定向到最新版本的信息页面.例如:https://github.com/reactiveui/ReactiveUI/releases/latest将重定向到https://github.com/reactiveui/ReactiveUI/releases/tag/5.99.6(因为我输入此内容;或者到页面对于更新的版本,总有一天).
这很好,但我需要一个下载文件本身的URL .在此示例中,与绿色下载按钮关联的.zip文件, https://github.com/reactiveui/ReactiveUI/releases/download/5.99.6/ReactiveUI-5.99.6.zip(因为我输入此内容;或者有一天,一个较新的zip文件.
为什么?作为Travis CI脚本的一部分,我想提供curl的URL来下载最新版本.
我猜到了几个URL,比如/ releases/download/latest /file.zip(用"latest"代替版本部分)和/releases/download/file.zip但是那些404.
有没有办法做到这一点 - 在shell脚本和curl的上下文中(注意:不是在带JS的浏览器页面中)?
我想在我的网站上有"下载最新版本"按钮,该按钮代表最新版本的链接(存储在GitHub版本中).我试图创建名为"latest"的发布标签,但是当我尝试加载新版本时(与标签创建日期混淆,标签交换等),它变得复杂了.手动更新我网站上的下载链接也是一项耗时且严格的任务.我看到唯一的方法 - 将所有下载按钮重定向到一些html,然后重定向到实际的最新版本.
请注意,我的网站托管在GitHub Pages(静态托管),所以我根本无法使用服务器端脚本来生成链接.有任何想法吗?
学习Jekyll并通过Github Pages进行托管我想弄清楚如何访问私有仓库的最新版本并将下载URL缓存到Jekyll页面。我知道如何通过Github API使用访问令牌使用AJAX访问数据:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
<script language="javascript" type="text/javascript">
let USER = "grim"
let REPO = "foobar"
let TOKEN = "jsfjksgfjasgdjgsajgasjk"
$.ajax({
url: `https://api.github.com/repos/${USER}/${REPO}/releases/latest?access_token=${TOKEN}`,
jsonp: true,
method: "GET",
dataType: "json",
contentType: 'application/json',
success: function(res) {
console.log(res.assets)
},
error: function(res) {
console.log(res)
}
})
</script>
Run Code Online (Sandbox Code Playgroud)
在config.yml中,我设置USER,REPO和TOKEN。我的研究确实找到了Cache API,但未列出。使用Github Pages作为主机并在Jekyll中进行编码,是否有办法获取最新版本并使用Jekyll将响应存储在私有仓库中?如果我无法缓存API,是否可以在Jekyll构建中存储发布URL,因此可以将其编码到按钮上,以便按钮充当下载内容?
研究:
我想在我的网站上添加一个项目最新github版本的下载链接.例如,链接https://github.com/mongodb/mongo/archive/r3.0.0-rc7.zip确实链接到最新版本(截至今天),但我不想硬编码版本号网站.
我发现了几个关于这个问题的问题,使用curl,ajax或php的答案.
我使用ajax尝试了使用github发布API的解决方案:
<!DOCTYPE html>
<HTML> <BODY>
<script language="javascript" type="text/javascript">
$(document).ready(function () {
GetLatestReleaseInfo();
});
function GetLatestReleaseInfo() {
$.getJSON("https://github.com/mongodb/mongo/releases").done(function (json) {
var release = json[0];
var asset = release.assets[0];
var downloadURL = "https://github.com/mongodb/mongo/releases" + release.tag_name + "/" + asset.name;
$(".mongodb-download").attr("href", downloadURL);
});
}
</script>
<a href="GetLatestReleaseInfo();">Link</a>
<a href="" onclick="location.href=this.href+downloadURL;return false;">Link2</a>
<a href="" onclick="location.href=this.href+mongodb-download;return false;">Link3</a>
</BODY>
</HTML>
Run Code Online (Sandbox Code Playgroud)
但我无法正确调用javascript函数,因为它似乎在我的上面尝试(Link,Link2和Link3).我对javascript或ajax不太熟悉,所以我很感激任何帮助; 也许没有Ajax有一种更简单的方法?
我在浏览next.js存储库时注意到这个函数从 GitHub 下载并提取模板,带有 tar:
export async function downloadAndExtractExample(
root: string,
name: string
): Promise<void> {
return await promisePipe(
got.stream('https://codeload.github.com/zeit/next.js/tar.gz/canary'),
tar.extract({ cwd: root, strip: 3 }, [`next.js-canary/examples/${name}`])
)
}
Run Code Online (Sandbox Code Playgroud)
我在 StackOverflow 上搜索,我只找到了这个:
这是一个解释如何从 GitHub 中提取 tar.gz 的线程,但没有提到“代码加载”子域。它与“api”有什么不同?