gpt4 book ai didi

javascript - 在 Mediawiki 中导入页面

转载 作者:行者123 更新时间:2023-11-29 15:40:11 24 4
gpt4 key购买 nike

我创建了一个脚本 (js) 来在我的 mediawiki 中导入一个页面。我有一个“不正确的 token ”。怎么了?

var xhttp = new ActiveXObject("Microsoft.XmlHttp");
xmlHttp2.open("POST", url, false);
xmlHttp2.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xmlHttp2.send("action=query&prop=info&intoken=import&titles=Test2");
var result2 = xmlHttp2.responseText;
var resultTokenImport = extractTokenImport(result2);
//return me 'dsa7u6ds6u7asd76das67sad+\' ( more or less :D )

xmlHttp2.open("POST", url, false);
xmlHttp2.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xmlHttp2.send("action=import&format=xml&xml="+dump+"&token="+resultTokenImport);

嗯,问题是“导入”需要“另一种”类型的 token 。

现在,我的问题是:

xmlHttp2.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");

给我一​​个错误“nofile”

对于这段代码:

xmlHttp2.setRequestHeader("Content-Type", "multipart/form-data");

它发给我:

第 0 行 Unknown 中的 multipart/form-data POST 数据中缺少边界

最佳答案

如果它说“无文件”,则它期望在 POST 正文中有一个文件。您可以使用 FormData 轻松发布.

引用自/api.php

    xml      - Uploaded XML file               Must be posted as a file upload using multipart/form-data

Example

Here is what is working for me. For simplicity, the following code is reading from a textarea and makes use of MediaWiki's JavaScript includes:

var apiUrl = mw.util.wikiScript( 'api' );
var onreadystatechange = function() {
if ( 4 !== this.readyState ) return;
if ( 200 === this.status ) {
console.log( this.response );
}
};

function continueWithToken ( token ) {
var fd = new FormData();
var xhr = new XMLHttpRequest();
// First argument is an array!
var bXml = new Blob( [$( 'textarea' ).val()], {
type: 'text/xml'
} );
fd.append( 'format', 'json' );
fd.append( 'action', 'import' );
// Third parameter is not required but
// You're likely on the safe side using it
fd.append( 'xml', bXml, 'file.xml' );
fd.append( 'token', token );

xhr.onreadystatechange = onreadystatechange;
xhr.open( 'POST', apiUrl );
xhr.send( fd );
}

$.get( apiUrl, {
format: 'json',
type: 'import',
action: 'tokens'
} ).done( function(r) {
var token = r.tokens.importtoken;
continueWithToken( token );
} );

这只是一个最小的实现。不要忘记错误处理。如果您将导出文件作为文件上传,并想让它在不充分支持 Blob 和 FormData 的旧浏览器中工作,只需构建一个表单!表单的目标可以是 iframe,因此您可以从中读取响应,而无需向用户公开空白的 API 结果页面。

预期响应

{"import":[{"ns":0,"title":"Main Page2","revisions":1}]}

完成请求

由客户端组成并发送给服务器以供引用的请求。请注意该文件位于 POST 正文中。

POST http://localhost/api.php HTTP/1.1
Host: localhost
User-Agent: <ua string>
Accept-Language: de,en-US;q=0.7,en;q=0.3
Accept-Encoding: gzip, deflate
Referer: http://localhost/index.php?title=Special:Export&action=submit
Content-Length: 3231
Content-Type: multipart/form-data; boundary=---------------------768648126486
Cookie: <redacted>; mwdbUserID=1; mwdbUserName=Rillke
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache

-----------------------768648126486
Content-Disposition: form-data; name="format"

json
-----------------------768648126486
Content-Disposition: form-data; name="action"

import
-----------------------768648126486
Content-Disposition: form-data; name="xml"; filename="file.xml"
Content-Type: text/xml

<mediawiki ...schemas... version="0.8" xml:lang="en">
<siteinfo>
<sitename>Sample Wiki</sitename>
<!-- .... -->
</mediawiki>
-----------------------768648126486
Content-Disposition: form-data; name="token"

XX39e9fd22a9de7675c71eadcfd2XXXX+\
-----------------------768648126486--

至于“Missing boundary in multipart/form-data POST data”错误,这是因为您发送它是经过 url 编码的,但声称它是 multipart/form-data . MediaWiki 正在标题中寻找边界,但找不到。

关于javascript - 在 Mediawiki 中导入页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20500895/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com