Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何正确格式化basecamp的ajax帖子_Php_Jquery_Ajax_Django_Basecamp - Fatal编程技术网

Php 如何正确格式化basecamp的ajax帖子

Php 如何正确格式化basecamp的ajax帖子,php,jquery,ajax,django,basecamp,Php,Jquery,Ajax,Django,Basecamp,我可以利用basecamp api文档中描述的curl方法从bash shell轻松创建消息。但是,我的应用程序不是用php编写的,所以我希望能够通过基本的ajax帖子访问basecamp服务器。不幸的是,我似乎无法将curl语句翻译成ajax文章。我认为这就足够了: function callBasecamp() { var parameters = { user:"[my_basecamp_username]", pass:

我可以利用basecamp api文档中描述的curl方法从bash shell轻松创建消息。但是,我的应用程序不是用php编写的,所以我希望能够通过基本的ajax帖子访问basecamp服务器。不幸的是,我似乎无法将curl语句翻译成ajax文章。我认为这就足够了:

function callBasecamp() {
    var parameters = {  
              user:"[my_basecamp_username]",
              pass:"[my_basecamp_password]",
              userAgent: '[my_app] (my_email)',
              contentType: 'application/json; charset=utf-8',
      data: ({ "subject": "This is a Test Message", "content": "This is test content. Please disregard if notified." }),
             };
    var data = JSON.stringify(parameters);
    $.ajax({
        type: "POST",
        data: data,
        dataType: 'json',
    url: "../../../../site_media/proxy.php?url=https://basecamp.com/[account_id#]/api/v1/projects/[project#]/messages.json?" + data,
        traditional: true,
        success: function(data){
            console.log(data);
        }
    });
}
但是,尽管我的dev服务器返回一个http200216响应,basecamp并没有创建消息,我也没有看到任何返回的数据。我使用php代理来规避django csrf问题:

proxy.php

<?php
// File Name: proxy.php
if (!isset($_POST['url'])) die();
$url = urldecode($_POST['url']);
$url = 'https://' . str_replace('https://', '', $url); // Avoid accessing the file system
echo file_get_contents($url); 
proxy.php

代理未正确转发。 尝试在proxy.php上添加标题:

header('Access-Control-Allow-Origin: *');
header('Cache-Control: no-cache, must-revalidate');
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Content-type: application/json');
对于JSON-p:
header('Content-Type:application/javascript')

调试文件\u get\u contents()的帮助程序

负载测试请求的用法:

注意:您可能会切换GET to POST inside stream_内容选项:

$url = 'https://basecamp.com/2052106/api/v1/projects/1450272/messages.json';

$payload = '{"user":"123",
             "pass":"123",
             "userAgent":"test test@test.com",
             "contentType":"application/json; charset=utf-8",
             "data": {
                "subject":"This is a Test Message",
                "content":"This is test content. Please disregard if notified."}
             }';

echo send($url, $payload);

另一种方法是在PHP中使用cURL:

。/../../../../
-yikes。坏…@cale–注意,将被解决。我得到了相同的结果,尽管服务器响应“HTTP/1.1”200 402略有不同“我添加了一个调试助手。如果状态代码错误,则很难从文件内容获取输出。这就是为什么我创建了一个带有忽略错误的流上下文。此外,帮助程序还输出文件获取内容请求的http响应头。这将使您非常接近错误。np,不客气。问题是:我无法测试有效负载post,因为我没有basecamp的凭据。但是帮手会帮你走得很远
$url = 'https://basecamp.com/2052106/api/v1/projects/1450272/messages.json';

$payload = '{"user":"123",
             "pass":"123",
             "userAgent":"test test@test.com",
             "contentType":"application/json; charset=utf-8",
             "data": {
                "subject":"This is a Test Message",
                "content":"This is test content. Please disregard if notified."}
             }';

echo send($url, $payload);