curl请求和Grease/TamperMonkeyGM_xmlHttpRequest的区别
Difference between curl request and Grease/TamperMonkey GM_xmlHttpRequest
我正在尝试在网站客户端中注入按钮,以便轻松地将 URL 发送到我的 pyload 实例。
我已经做了类似的事情来在本地 jDownloader 实例中创建包,所以我离这里不远。
我已经成功地使用 curl 与 pyload API 对话:
curl -s -d "username=myusername&password=mypassword" -X POST http://MYPYLOADINSTANCE:8000/api/login
哪个 returns 我 - 因为它应该 - 我需要继续使用 api.
的会话 ID
但是,当我尝试使用 GM_xmlhttpRequest 从 Tampermonkey 中进行相同的调用时,我总是通过 responseText 'false' 获得成功 - 这意味着身份验证不成功:
GM_xmlhttpRequest ( {
context: { contextData: 'foo', contextData2: 'bar' }, // <- ignore that, only for testing
method: 'POST',
data: 'username=myusername&password=mypassword',
synchronous: false,
url: 'http://MYPYLOADINSTANCE:8000/api/login',
onload: function(responseDetails) { alert(responseDetails.responseText
+ '\n' + responseDetails.context.contextData); },
onerror: function(responseDetails) { alert(responseDetails); },
onabort: function(responseDetails) { alert(responseDetails); }
});
我的问题是:
我做错了什么,使用 curl 和使用 GM_xmlhttpRequest 之间的区别(对于服务器/pyload)在哪里?我认为它应该导致基本相同的查询?
不,遗憾的是我在 pyload 日志中没有看到任何内容。 :-(
在GM.xmlHttpRequest/GM_xmlhttpRequest中使用POST方法时,还需要设置Content-Typeheader。
POST request
When making a POST request, most sites require the Content-Type header
to be defined as such:
GM.xmlHttpRequest({
method: "POST",
url: "http://www.example.net/login",
data: "username=johndoe&password=xyz123",
headers: {
"Content-Type": "application/x-www-form-urlencoded"
},
onload: function(response) {
if (response.responseText.indexOf("Logged in as") > -1) {
location.href = "http://www.example.net/dashboard";
}
}
});
我正在尝试在网站客户端中注入按钮,以便轻松地将 URL 发送到我的 pyload 实例。 我已经做了类似的事情来在本地 jDownloader 实例中创建包,所以我离这里不远。
我已经成功地使用 curl 与 pyload API 对话:
curl -s -d "username=myusername&password=mypassword" -X POST http://MYPYLOADINSTANCE:8000/api/login
哪个 returns 我 - 因为它应该 - 我需要继续使用 api.
的会话 ID但是,当我尝试使用 GM_xmlhttpRequest 从 Tampermonkey 中进行相同的调用时,我总是通过 responseText 'false' 获得成功 - 这意味着身份验证不成功:
GM_xmlhttpRequest ( {
context: { contextData: 'foo', contextData2: 'bar' }, // <- ignore that, only for testing
method: 'POST',
data: 'username=myusername&password=mypassword',
synchronous: false,
url: 'http://MYPYLOADINSTANCE:8000/api/login',
onload: function(responseDetails) { alert(responseDetails.responseText
+ '\n' + responseDetails.context.contextData); },
onerror: function(responseDetails) { alert(responseDetails); },
onabort: function(responseDetails) { alert(responseDetails); }
});
我的问题是: 我做错了什么,使用 curl 和使用 GM_xmlhttpRequest 之间的区别(对于服务器/pyload)在哪里?我认为它应该导致基本相同的查询?
不,遗憾的是我在 pyload 日志中没有看到任何内容。 :-(
在GM.xmlHttpRequest/GM_xmlhttpRequest中使用POST方法时,还需要设置Content-Typeheader。
POST request
When making a POST request, most sites require the Content-Type header to be defined as such:
GM.xmlHttpRequest({ method: "POST", url: "http://www.example.net/login", data: "username=johndoe&password=xyz123", headers: { "Content-Type": "application/x-www-form-urlencoded" }, onload: function(response) { if (response.responseText.indexOf("Logged in as") > -1) { location.href = "http://www.example.net/dashboard"; } } });