URL 在 php 中被调用错误
URL being called wrong in php
我正在创建一个要从外部 API 调用的字符串 URL,首先我得到两个日期,开始和结束:
$start = new Carbon($request->date_start);
$end = new Carbon($request->date_end);
只有日期值通过 $request 对象传递 (25/06/2016)。
然后我在 URL 字符串中使用这些值:
$url = "https://www.api.com/KML/PositionHistory?fromDate=" . $start->toDateTimeString() . "&toDate=" . $end->addHours(24)->toDateTimeString();
调用 url:
$contents = file_get_contents($url);
这是我收到错误的地方,因为它试图调用以下 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
完成 URL 建筑
$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);
Carbon 正在返回包含空格的时间戳,这些空格随后在 URL 中被错误处理。在使用 urlencode 将其放入 URL 之前,您需要对时间戳进行编码。然后在接收方使用 GET 数据之前使用 urldecode。
使用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);
试试这个。
$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);
我正在创建一个要从外部 API 调用的字符串 URL,首先我得到两个日期,开始和结束:
$start = new Carbon($request->date_start);
$end = new Carbon($request->date_end);
只有日期值通过 $request 对象传递 (25/06/2016)。
然后我在 URL 字符串中使用这些值:
$url = "https://www.api.com/KML/PositionHistory?fromDate=" . $start->toDateTimeString() . "&toDate=" . $end->addHours(24)->toDateTimeString();
调用 url:
$contents = file_get_contents($url);
这是我收到错误的地方,因为它试图调用以下 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);
Carbon 正在返回包含空格的时间戳,这些空格随后在 URL 中被错误处理。在使用 urlencode 将其放入 URL 之前,您需要对时间戳进行编码。然后在接收方使用 GET 数据之前使用 urldecode。
使用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);
试试这个。
$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);