有没有一种方法可以将JavaScript变量发送到PHP代理处理API调用

时间:2019-06-17 14:23:56

标签: javascript php proxy

我正在构建一个单页Web应用程序,该应用程序调用第三方API(在本例中为Dark Sky weather API)。因为此API不支持CORS,所以我试图编写一个服务器端PHP代理来进行API调用。

我需要能够在HTTP GET请求中包括纬度和经度参数,这些参数是从客户端JavaScript收集的,但是我正努力提出一个工作流程,以将这些JavaScript变量传递给我的PHP。代理。这似乎是一个非常简单的问题,但对我来说是一个新问题。

如果任何人都可以提供有关处理此问题的基本说明,或者将我指向可以解释该问题的资源,那将是很棒的。

我目前正在使用CORS代理发出请求,但由于API请求需要密钥,因此我想在生产中取消使用它。

2 个答案:

答案 0 :(得分:0)

如果我很好理解,您只需要在请求的URL上将这些变量设置为查询字符串,然后使用PHP进行处理即可。

您只需要在URL的末尾将它们添加为whateverurlyouhave.com/endpoint?latitude=yourlatitude&longitude=yourlongitude

答案 1 :(得分:0)

这很简单。假设您从一个文本框中得到两个纬度。

步骤1:将经度和纬度发送到服务器

let lat=$('.lat').val();
let long=$('.long').val();

$.ajax({      
  "crossDomain": true,
  "url": "http://yourserver.com?lat=lat&long=long",
  "method": "GET",
  "success":function(res){
   console.log(response);
  }
});

第2步:接收和调用外部API

<?php
$lat =$_REQUEST['lat'];
$long =$_REQUEST['long'];
$API_KEY=""; //Your api key
$curl = curl_init();

 curl_setopt_array($curl, array(
  CURLOPT_URL => "https://api.darksky.net/forecast/$API_KEY/$lat,$long",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => array(
    "Accept: */*",
    "Cache-Control: no-cache",
    "Connection: keep-alive",
    "Host: api.darksky.net",
    "cache-control: no-cache"
  ),
));

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
  echo "cURL Error #:" . $err;
} else {
  echo $response;
}