需要发送API请求.出于某种原因,服务器阻止了CURL请求,但它批准了XHR ajax请求.我可以发送一个ajax请求,但是出现了另一个问题 - 混合内容我的网站是通过HTTPS提供的,但是需要发送的请求是通过HTTP进行的,所以我不能使用ajax.
我正在寻找一种通过CURL模拟ajax请求的方法,以某种方式欺骗服务器以相信CURL请求确实是一个ajax请求.
这是我尝试过的.
这是我的CURL请求.
$ch = curl_init();
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (X11; Linux x86_64)');
curl_setopt($ch, CURLOPT_REFERER, 'server's url');
curl_setopt($ch, CURLOPT_AUTOREFERER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Accept:application/json, text/javascript, */*; q=0.01',
'Accept-Encoding:gzip, deflate',
'Accept-Language:en-US,en;q=0.9',
'Connection:keep-alive',
'Content-Type: application/json; charset=utf-8',
'X-Requested-With: XMLHttpRequest',
'__RequestVerificationToken: $token'
));
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_MAXREDIRS, 10);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_COOKIEJAR, base_path().'/cookies.txt');
curl_setopt($ch, CURLOPT_COOKIEFILE, base_path().'/cookies.txt');
$buffer = curl_exec($ch);
if(curl_error($ch))
{
$buffer = curl_error($ch);
}
curl_close($ch);
Run Code Online (Sandbox Code Playgroud)
return $ buffer; 此卷曲请求被阻止 …
任何帮助/建议/方向将不胜感激.即使这个问题不具体,也请试试我.
我正在开发一个Web应用程序,它将连接到预先存在的基于商业云的日历,该日历将包含特定事件的日程安排.
我将有一个授权按钮,它只是要求用户输入他们的基于云的日历的凭据.用户成功输入凭据后,我希望我的应用程序连接到基于云的应用程序的数据库并获取必要的数据.
流程就像
用户 - >单击授权按钮 - >输入凭据 - >连接到系统 - >获取必要的数据 - >在我的Web应用程序中更新它.
我正在画一个空白,因为我没有找到任何有用的资源来获取如何访问单独的应用程序和获取数据.我知道我必须构建某种类型的API来与该系统进行通信,但我不确切知道如何.
对不起,如果我没有意义,但我真的想要一些帮助.是否有一些库提供类似的功能?我该怎么开始呢?我使用PHP作为服务器端语言.
我在尝试使用file_get_contents和捕获cookie时收到无效的cookie字符串curl.直接从浏览器浏览时收到的cookie是有效/活动的.但是,从捕获的饼干file_get_contents和curl似乎是无效的.
我试图从file_get_contents这样捕获
$context = array(
'http' => array(
'method' => 'GET',
'header' => array('Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*\/*;q=0.8', 'User-Agent:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/63.0.3239.84 Chrome/63.0.3239.84 Safari/537.36'),
)
);
$cxContext = stream_context_create($context);
file_get_contents($url, false, $cxContext);
$cookies = array();
foreach ($http_response_header as $hdr) {
if (preg_match('/^Set-Cookie:\s*([^;]+)/', $hdr, $matches)) {
$cookies = $matches[1];
}
}
return $cookies;
Run Code Online (Sandbox Code Playgroud)
我试着通过设置标题来解决这个问题,但是返回的cookie总是过期或者无效.
但是,通过浏览器,我获得的cookie始终有效.
任何人都遇到类似问题,不知道如何解决这个问题.
我有一个字符串,它将dateTime作为一个GROUP从数据库中获取,所以我得到这样的东西
2017-10-20 05:00:00,2017-10-20 09:00:00,2017-10-20 07:00:00,2017-10-20 13:30:00,2017-10-20 16:00:00,2017-10-20 13:00:00,2017-10-20 06:00:00,2017-10-20 09:30:00,2017-10-20 10:30:00,2017-10-20 15:30:00,2017-10-20 17:00:00
Run Code Online (Sandbox Code Playgroud)
请注意,所有日期都相同,即2017-10-20.因为我不需要担心不同的日期.我想要的只是从这个字符串中提取时间,然后像这样打印出来
05:00, 09:00, 07:00, 13:30, 16:00 //and so on
Run Code Online (Sandbox Code Playgroud)
我不想秒,这是不必要的.
我尝试使用PHP的strtotime()函数,但它失败并改为00:00:00.
有任何想法吗?我使用Laravel作为模板引擎.
我试图通过使用该函数删除空数组元素(从csv文件)splice().
数组元素存储在csv.data:
csv.data.forEach(function(item,index) {
if (item.length < 2) { // don't want anything less than two
csv.data.splice(index,1);
}
});
Run Code Online (Sandbox Code Playgroud)
这样可行,但它仍然在csv文件中返回两个空数组(行),最初有六个空行,但它会跳过两个空行.
我做错了吗?
这是 csv.data
[
[
"1212",
"okay",
""
],
[
""
],
[
""
],
[
""
],
[
""
],
[
""
],
[
""
]
]
Run Code Online (Sandbox Code Playgroud)
预期
[
[
"1212",
"okay",
""
],
]
Run Code Online (Sandbox Code Playgroud) php ×4
ajax ×1
connection ×1
cookies ×1
credentials ×1
csv ×1
curl ×1
date ×1
datetime ×1
http-headers ×1
javascript ×1
jquery ×1
laravel ×1