带有Special的获取页面的HTTP请求:导出

时间:2012-04-23 15:57:28

标签: http-headers wikipedia

我如何使用Special:出口用于我的目的。我从我的应用程序发送下一个标题:

string request = "POST en.wikipedia.org/w/index.php?title=Special:Export&action=submit HTTP/1.1\r\n"
                 "Host: en.wikipedia.org\r\n"
                 "Content-Length: 32\r\n"
                 "Content-Type: application/x-www-form-urlencoded\r\n"
                 "Connection: close\r\n\r\n"
                 "catname=&pages=ukraine&curonly=1";

但它向我呈现有关错误的信息:

  

HTTP / 1.0 400错误请求服务器:squid / 2.7.STABLE9日期:星期一,4月23日   2012 14:45:12 GMT内容类型:text / html内容长度:3111   X-Squid-Error:ERR_INVALID_URL 0 X-Cache:来自的MISS   amssq46.esams.wikimedia.org X-Cache-Lookup:NONE from   amssq46.esams.wikimedia.org:80连接:关闭

我需要创建工具来替换inwiki链接以帮助翻译。我确定一些这样的工具已经存在,但我想自己做。

编辑:我使用c ++和套接字。

已编辑:新请求:

string request = "POST https://en.wikipedia.org/w/index.php?title=Special:Export&action=submit HTTP/1.1\r\n"
//string request = "GET https://en.wikipedia.org/w/index.php?title=Special:Export&pages=ukraine&curonly=1\r\n"
                 "Host: en.wikipedia.org\r\n"
                 "User-Agent: MyCoolTool\r\n"
                 "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n"
                 "Accept-Language: en-us,en;q=0.5\r\n"
                 "Accept-Encoding: gzip, deflate\r\n"
                 "Content-Length: 32\r\n"
                 "Content-Type: application/x-www-form-urlencoded\r\n"
                 "Connection: close\r\n\r\n"
                 "catname=&pages=Ukraine&curonly=1";

当我试图获得页面时

string request = "GET http://en.wikipedia.org/wiki/Ukraine\r\n" ...
                 "User-Agent: YolaTool/0.1\r\n" ...

我有

  

脚本应使用带有联系人信息的User-Agent字符串   信息,或者他们可能被IP封锁,恕不另行通知。

1 个答案:

答案 0 :(得分:1)

有一个原因我建议你使用更高级别的网络库,它直接支持HTTP:这样,你就不必处理低级细节,你可以确定它们是正确的。< / p>

在您的情况下,问题是在POST关键字之后,必须有绝对URI:

POST http://en.wikipedia.org/w/index.php?title=Special:Export&action=submit HTTP/1.1

或者更常见的是绝对路径:

POST /w/index.php?title=Special:Export&action=submit HTTP/1.1

请参阅RFC 2616, §5.1.2

如果您解决了这个问题,您将收到403错误,但这次错误消息明确了如何解决此问题:

  

脚本应使用带有联系信息的信息性用户代理字符串,否则可能会被IP阻止,恕不另行通知。

请参阅WikiMedia User-Agent policy