簡體   English   中英

我在使用 cURL 發布到 URL 時遇到問題

[英]I am having an issue with posting to a URL using cURL

我正在做一個小項目,遇到了麻煩。 我正在嘗試使用 cURL 特別是 curl_init 將信息發布到 URL。 當我將完整的 URL 放入代碼中時,我可以使代碼正常工作,當我嘗試更改 URL 的某個方面時出現問題。例如

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://test.com");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, $pdata);

上面的代碼工作正常,但是如果我做類似下面的代碼就會出錯。

$mode = "one";
$ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, "https://' . $mode . '.test.com");
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
    curl_setopt($ch, CURLOPT_POST, TRUE);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $pdata);

我是不是做錯了什么,或者 function 不接受這種 URL 操作?

這是一個簡單的字符串引用錯誤,實際上與 cURL 或 URL 無關 - 盡管在這種情況下它會導致您形成不正確的 URL。這是您的代碼生成的 URL -

https://' . one . '.test.com

演示: http://sandbox.onlinephpfunctions.com/code/e2a878e59681f9c731140d5005043eb7bb2ab91a

而顯然你想要的是

https://one.test.com

您可以通過兩種方式解決此問題 - 一種正確使用字符串連接(通過以"而不是'結束第一個字符串並類似地開始第二個字符串),另一種使用 PHP 的插值功能將變量簡單地放置在單個字符串中。

方法一:

$mode = "one";
curl_setopt($ch, CURLOPT_URL, "https://".$mode.".test.com");

方法二:

$mode = "one";
curl_setopt($ch, CURLOPT_URL, "https://$mode.test.com");

對於任何字符串,您都會遇到同樣的問題 - 您不能以"開始一個字符串,然后以'結束它並期望它產生有效的 output。兩端的分隔符必須相同。

在這種特定情況下,您實際上只是以一個長字符串結束,因此您沒有語法錯誤,但它會導致一個字符串不包含您預期的內容,導致 cURL 請求失敗,因為URL 是錯誤的。

我認為是因為您正在關閉單次和雙次嘗試:“https://”。 $模式。 “.test.com”

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM