cURL 未设置 URL
cURL No URL set
此 PHP 允许用户以二进制或纯文本形式提交带有 URL 的表单。然后将 URL 转换为纯文本,我使用 cURL 加载响应,然后将其转换回二进制。如果你想知道,它来自一个二进制翻译器,它可以翻译文本 -> 二进制和二进制 -> 文本,但也接受 URLs.
问题:如您所见,二进制 URL 被转换为文本,然后传递给 cURL。明文值存储在$newtext
中。通过我所做的一些调试,我可以确认 binaryToText()
确实像宣传的那样工作。纯文本 URLs(参见 if 语句的 else
部分)已成功设置,但转换后的二进制未成功设置。
例子
例如$text = "http://google.co.uk";
(isBinary($text) == false
)
curl_setopt($ch, CURLOPT_URL, $text);
<- 这有效
例如$text = "01101000011101000111010001110000001110100010111100101111011001110110111101101111011001110110110001100101001011100110001101101111001011100111010101101011"
(同googleurl)
(isBinary($text) == true
)
$newtext = binaryToText($text);
curl_setopt($ch, CURLOPT_URL, $newtext);
echo curl_error($ch);
-> 输出 "No URL set!"
哪里有问题...不过我看不到。
代码清单
$text = $_POST["text"];
if(startsWith($text, "http://") || startsWith($text, "https://") || startsWith($text, textToBinary("http://")) || startsWith($text, textToBinary("https://"))) {
// URL - accepts binary (prefered), or plain text url; returns binary.
$ch = curl_init();
if(isBinary($text)) {
$newtext = binaryToText($text);
curl_setopt($ch, CURLOPT_URL, $newtext);
} else {
curl_setopt($ch, CURLOPT_URL, $text);
}
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_USERAGENT, "MY USERAGENT");
if(isset($_GET["r"])) curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
$result=curl_exec($ch);
echo curl_error($ch);
curl_close($ch);
echo textToBinary($result);
} else if...
函数
function isBinary($input) {
return !preg_match('/[^(0|1)]/', $input); // contains nothing but 0 and 1
}
function binaryToText($input) {
$return = '';
$chars = explode("\n", chunk_split(str_replace("\n", '', $input), 8));
$_I = count($chars);
for($i = 0; $i < $_I; $return .= chr(bindec($chars[$i])), $i++);
return $return;
}
编辑:
$newtext
的输出包含在此输出中:
text: 01101000011101000111010001110000001110100010111100101111011001110110111101101111011001110110110001100101001011100110001101101111001011100111010101101011
newtext: http://google.co.uk
No URL set!00000000
来自:
if(isBinary($text)) {
echo "text: ".$text."\n";
$newtext = binaryToText($text);
echo "newtext: ".$newtext."\n";
curl_setopt($ch, CURLOPT_URL, $newtext);
} else {
curl_setopt($ch, CURLOPT_URL, $text);
}
遍历代码并测试输出。
最有可能的情况是您的 isBinary()
功能出现故障。
使用
做一个测试输出
print_r(isBinary($text))
看看有什么吧returns.
解决了!
我的 $newtext
变量中有一个 NUL 字节 - 因此当 echo
有效时,cURL 不接受它作为有效的 URL。我在 binaryToText()
方法中使用了以下代码行:
$return = str_replace("[=10=]", "", $return);
这会将所有 NUL 字符替换为 ""
。很高兴它成功了!
此 PHP 允许用户以二进制或纯文本形式提交带有 URL 的表单。然后将 URL 转换为纯文本,我使用 cURL 加载响应,然后将其转换回二进制。如果你想知道,它来自一个二进制翻译器,它可以翻译文本 -> 二进制和二进制 -> 文本,但也接受 URLs.
问题:如您所见,二进制 URL 被转换为文本,然后传递给 cURL。明文值存储在$newtext
中。通过我所做的一些调试,我可以确认 binaryToText()
确实像宣传的那样工作。纯文本 URLs(参见 if 语句的 else
部分)已成功设置,但转换后的二进制未成功设置。
例子
例如$text = "http://google.co.uk";
(isBinary($text) == false
)
curl_setopt($ch, CURLOPT_URL, $text);
<- 这有效
例如$text = "01101000011101000111010001110000001110100010111100101111011001110110111101101111011001110110110001100101001011100110001101101111001011100111010101101011"
(同googleurl)
(isBinary($text) == true
)
$newtext = binaryToText($text);
curl_setopt($ch, CURLOPT_URL, $newtext);
echo curl_error($ch);
-> 输出 "No URL set!"
哪里有问题...不过我看不到。
代码清单
$text = $_POST["text"];
if(startsWith($text, "http://") || startsWith($text, "https://") || startsWith($text, textToBinary("http://")) || startsWith($text, textToBinary("https://"))) {
// URL - accepts binary (prefered), or plain text url; returns binary.
$ch = curl_init();
if(isBinary($text)) {
$newtext = binaryToText($text);
curl_setopt($ch, CURLOPT_URL, $newtext);
} else {
curl_setopt($ch, CURLOPT_URL, $text);
}
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_USERAGENT, "MY USERAGENT");
if(isset($_GET["r"])) curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
$result=curl_exec($ch);
echo curl_error($ch);
curl_close($ch);
echo textToBinary($result);
} else if...
函数
function isBinary($input) {
return !preg_match('/[^(0|1)]/', $input); // contains nothing but 0 and 1
}
function binaryToText($input) {
$return = '';
$chars = explode("\n", chunk_split(str_replace("\n", '', $input), 8));
$_I = count($chars);
for($i = 0; $i < $_I; $return .= chr(bindec($chars[$i])), $i++);
return $return;
}
编辑:
$newtext
的输出包含在此输出中:
text: 01101000011101000111010001110000001110100010111100101111011001110110111101101111011001110110110001100101001011100110001101101111001011100111010101101011
newtext: http://google.co.uk
No URL set!00000000
来自:
if(isBinary($text)) {
echo "text: ".$text."\n";
$newtext = binaryToText($text);
echo "newtext: ".$newtext."\n";
curl_setopt($ch, CURLOPT_URL, $newtext);
} else {
curl_setopt($ch, CURLOPT_URL, $text);
}
遍历代码并测试输出。
最有可能的情况是您的 isBinary()
功能出现故障。
使用
做一个测试输出print_r(isBinary($text))
看看有什么吧returns.
解决了!
我的 $newtext
变量中有一个 NUL 字节 - 因此当 echo
有效时,cURL 不接受它作为有效的 URL。我在 binaryToText()
方法中使用了以下代码行:
$return = str_replace("[=10=]", "", $return);
这会将所有 NUL 字符替换为 ""
。很高兴它成功了!