2016-07-08 76 views
0

我創建一個字符串URL從外部API調用,首先我得到兩個日期,開始和結束:URL被稱爲錯在PHP

$start = new Carbon($request->date_start); 
$end = new Carbon($request->date_end); 

只有日期值正在通過$通過請求對象(25/06/2016)。

我然後在URL字符串中使用這些值:

$url = "https://www.api.com/KML/PositionHistory?fromDate=" . $start->toDateTimeString() . "&toDate=" . $end->addHours(24)->toDateTimeString(); 

調用的網址:

$contents = file_get_contents($url); 

這是我的錯誤,因爲它試圖撥打以下網址:

https://www.api.com/KML/PositionHistory?fromDate=2016-07-17 00:00:00&toDate=2016-08-01 00:00:00 

它創建了&字符串,我該如何解決這個問題?

請注意,日期結束時的時間是必需的。

編輯:

使用上的時間戳urlencode和修整$url通話效果以下錯誤之前:

file_get_contents(https://www.api.com/KML/PositionHistory?fromDate=2016-07-17+00%3A00%3A00&toDate=2016-08-01+00%3A00%3A00): 

failed to open stream: HTTP request failed! HTTP/1.1 400 Bad Request 

好了,所以這裏是得到它由entiendoNull爲應對工作:

只需使用網址http_build_query

$arr = [ 
      'fromDate' => $start->toDateTimeString(), 
      'toDate' => $end->addHours(24)->toDateTimeString(), 
     ]; 

$url = "https://www.api.com/KML/LatestPositions?" . http_build_query($arr); 

$contents = file_get_contents($url); 
+1

@Anant,去年'「'您添加到您的例子是錯誤的,不應該存在。裏安,如果你使用的是什麼'http_build_query($改編,‘’,‘&’)'建你的查詢,其中'$ arr'是一個包含參數和它們的值的數組? – entiendoNull

+0

@Anant嗨Anant,空格是在。之前和之後,而不是在引號內,所以爲了便於閱讀,它們不影響 – Riaan

+0

'echo $ start'和'echo $ end'顯示輸出 –

回答

1

試試這個。

$arr = array('fromDate' => $start->toDateTimeString(),'toDate' => $end->addHours(24)->toDateTimeString()); 
$url = 'https://www.api.com/KML/PositionHistory?'; 
$url .= http_build_query($arr,'','&'); 


$contents = file_get_contents($url); 
+0

只需稍微調整一下,在帖子中查看我的答案。還有一個來自PHP文檔的例子。 – Riaan

0

Carbon正在返回包含空格的時間戳,然後這些空間在URL中被錯誤處理。在使用urlencode將其放入URL之前,您需要對時間戳進行編碼。然後在使用GET數據之前在接收端使用urldecode。

+0

嗨,檢查我的編輯。 – Riaan

0

使用urlencode()trim()

$start = new Carbon($request->date_start); 
$end = new Carbon($request->date_end); 

$url = "https://www.api.com/KML/PositionHistory?fromDate=" . urlencode($start->toDateTimeString()) . "&toDate=" . urlencode($end->addHours(24)->toDateTimeString()); 

$url = trim($url); // use trim 

$contents = file_get_contents($url); 
+0

嗨,檢查我的編輯。 – Riaan