首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用multipart/form-data POST请求时,从ConnectWise接口获取无效响应

使用multipart/form-data POST请求时,从ConnectWise接口获取无效响应
EN

Stack Overflow用户
提问于 2019-05-18 04:59:12
回答 2查看 810关注 0票数 2

在使用curl接口将文档上传到现有工单时,我收到了一个错误,我认为问题出在我执行ConnectWise请求的方式上。

我试着根据我在Google上找到的内容来调整卷曲选项,但似乎都不起作用。

以下是POST请求

代码语言:javascript
运行
复制
 function post_ticket_attachment ( $ticket_id, $file_attachment ) {
     $url = "https://api-na.myconnectwise.net/v4_6_release/apis/3.0/system/documents";
     $filename = $file_attachment['name'];
     $filedata = $file_attachment['tmp_name'];
     $filesize = $file_attachment['size'];


     $fields = array ( 
        "recordId" => $ticket_id, 
        "recordType" => "Ticket",
        "title" => $file_attachment['name']
     );

     $filenames = array($filedata);
     $files = array();
     foreach( $filenames as $f ){
         $files[$f] = file_get_contents($f);
     }

     $ch = curl_init();
     $boundary = uniqid();
     $delimiter = '-------------' . $boundary;

     $post_data = build_data_files($boundary, $fields, $files);

     curl_setopt_array($ch, array(
      CURLOPT_URL => $url,
      CURLOPT_RETURNTRANSFER => 1,
      CURLOPT_MAXREDIRS => 10,
      CURLOPT_TIMEOUT => 30,
      CURLOPT_CUSTOMREQUEST => "POST",
      CURLOPT_POST => 1,
      CURLOPT_POSTFIELDS => $post_data,
      CURLOPT_HTTPHEADER => array(
        "Authorization: basic " . $connect_wise_auth,
        "Content-Type: multipart/form-data; boundary=" . $delimiter,
        "Content-Length: " . strlen($post_data)
      ),
     ));

     $response = curl_exec($ch);
     console_log ($response);
}

下面是我是如何构建post数据的:

代码语言:javascript
运行
复制
function build_data_files($boundary, $fields, $files){
    $data = '';
    $eol = "\r\n";

    $delimiter = '-------------' . $boundary;

    foreach ($fields as $name => $content) {
        $data .= "--" . $delimiter . $eol
            . 'Content-Disposition: form-data; name="' . $name . "\"".$eol.$eol
            . $content . $eol;
    }


    foreach ($files as $name => $content) {
        $data .= "--" . $delimiter . $eol
            . 'Content-Disposition: form-data; name="' . $name . '"; filename="' . $name . '"' . $eol
            . 'Content-Transfer-Encoding: binary'.$eol
            ;

        $data .= $eol;
        $data .= $content . $eol;
    }
    $data .= "--" . $delimiter . "--".$eol;


    return $data;
}

我希望请求能够正确发布,但我得到的却是来自ConnectWise的响应:“无法路由。Codebase/公司无效。”

EN

回答 2

Stack Overflow用户

发布于 2019-09-02 10:40:53

我刚刚遇到了这个问题,因为我忘记将用户名和密码添加到基本授权中。看起来你正在添加它,但是我看不到它包含什么,所以,为了澄清,用户名是company+publickey,密码是私钥,而在base64中编码。

the official documentation (您可能需要登录才能看到它)

建议创建接口成员,而不是使用绑定到特定成员的接口密钥。授权:基本base64(companyid+publickey:privatekey) (授权:基本Y29tcGFueWlkK3B1YmxpY2tleTpwcml2YXRla2V5)

一旦您正确地添加了该信息,API将能够检查您的用户是否正确以及您是否属于该公司。

票数 0
EN

Stack Overflow用户

发布于 2020-12-13 05:28:16

对不起,没有完整的答案(我还不能评论),当我试图通过标识符查找公司时,我得到了同样的错误。结果是我没有使用正确的URI。尝试使用fiddler或其他工具来检查你所张贴的内容,看看是否有不完全正确的地方。

我的问题是这里有一个正斜杠:company/companies/?conditions

它应该是company/companies?conditions

一开始我没有注意到,因为我使用变量来构建URI,所以它不是很清楚。

我还发现使用这个https://github.com/christaylorcodes/ConnectWiseManageAPI很有帮助,因为我可以看到请求应该如何格式化(通过观察我发布时的fiddler )。然后,您可以确保您的帖子的行为是相同的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56193502

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档