【发布时间】:2011-07-04 14:09:26
【问题描述】:
我有一个 C++ 控制台应用程序,它使用 wininet.h 访问 URL,并下载网页内容。
内容通常只是一个 IP 地址。它在这里:http://www.whatismyip.com/automation/n09230945.asp
一切都很好。
然后我决定在 PHP 中创建自己的 IP 检查器,使用以下代码:
<?php
$ip = $_SERVER['REMOTE_ADDR'];
header("Cache-Control: private");
header("Content-Type: text/html");
echo $ip;
?>
这在浏览器中看起来是正确的,与 whatismyip.com 的结果相同,但 C++ 程序只是在 IP 之后添加了一堆垃圾,然后重复 IP 一半截断,然后添加更多垃圾。
这是什么原因造成的?我尝试分析标题,但我无法发现差异。
另外,我尝试将纯 txt 文件放到服务器上,C++ 程序读取它完美。
我还尝试将标题更改为纯文本和文本/纯文本。结果一样。
感谢您的帮助!
编辑:这是 C++ 代码的一部分:
HINTERNET OpenAddress = InternetOpenUrl(connect,"http://www...", NULL, 0, INTERNET_FLAG_PRAGMA_NOCACHE|INTERNET_FLAG_KEEP_CONNECTION, 0);
char DataReceived[16] = " ";
DWORD NumberOfBytesRead = 0;
while (InternetReadFile(OpenAddress, DataReceived, 16, &NumberOfBytesRead) && NumberOfBytesRead)
{
cout << DataReceived;
}
【问题讨论】:
-
你能发布一个你得到的内容的例子吗?
-
我确信您的问题不在于 PHP,而在于这个 C++ 程序。在我看来,您正在阅读比您需要的缓冲区更远的内容。例如,发送的 IP 地址只会很长,您的缓冲区可能比这更长,而您正在读取整个缓冲区。
-
它们通常是随机的非标准字符。读取的任何内容都存储在 char [16] 中。我不明白为什么它可以完美地与其他服务一起使用,但不是我的。