我有一個C++控制檯應用程序,它使用wininet.h來訪問URL並下載網頁的內容。PHP和C++檢索用戶IP
內容通常只是一個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;
}
你可以發佈一個你回來的內容的例子嗎? – ircmaxell 2011-02-25 20:47:59
我相信你的問題不在PHP中,而是在這個C++程序中。聽起來像你正在讀更遠的緩衝區,而不是你需要的。正如所發送的IP地址只有這麼長時間,你的緩衝區可能比這個長,你正在讀整個緩衝區。 – Brad 2011-02-25 20:50:14
它們通常是隨機的非標準字符。無論讀取什麼都存儲在char [16]中。我不明白爲什麼它完美地與其他服務協同工作,但不是我的。 – djdy 2011-02-25 20:55:04