首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用cURL ()将提供的带有内联参数的一行cURL代码转换为格式

如何使用cURL ()将提供的带有内联参数的一行cURL代码转换为格式
EN

Stack Overflow用户
提问于 2013-12-23 11:10:01
回答 1查看 2K关注 0票数 3

我试图使用来自avalara.net的API来获取销售税数据及其API文档,列出了本质上是带有JSON格式的长字符串的代码行,用于通过cURL连接到API;我不熟悉这种单一字符串样式,并试图将其转换为遵循curl_setopt手册样式的格式,例如通过curl_setopt()设置选项,而不是将其设置为内联命令(如-u和-d ),但我没有取得任何进展。

我已经看过php - implement curl command line to php, tried but getting error 并添加了他们的解决方案--因为我没有收到任何错误消息,我不知道我的问题是否相同,但似乎添加CURLOPT_FOLLOWLOCATION不会有什么影响。似乎没什么区别。

我还查看了convert curl line command in php code,但是它没有帮助,因为我的代码中已经有了curl_exec(),并且一直在阅读php手册页。

他们的代码可以在https://github.com/avadev/AvaTax-Calc-REST-cURL/blob/master/tax-get-POST.txt上看到,相关部分是:

代码语言:javascript
复制
curl -u <AccountNumber>:<LicenseKey> -H "Content-Type: text/json" -d '{
--long string of data omitted; see link above for full data--
}' "https://development.avalara.net/1.0/tax/get"

我做了一些研究,发现-u是一个用户名/密码,-H是一个特殊的头,-d是用来发送数据的.所以这就是我把它放在一起的:

代码语言:javascript
复制
// Identify the target URL
$url = 'https://development.avalara.net/1.0/tax/get';

// Start the process
$curl = curl_init($url);

// Tell cURL to fail if an error occurs
curl_setopt($curl, CURLOPT_FAILONERROR, 1);

// Allow for redirects; we don't know how avalara might route requests
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);

// Assign the returned data to a variable
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);

// Set the timeout
curl_setopt($curl, CURLOPT_TIMEOUT, 5);

// Make sure to use POST method
curl_setopt($curl, CURLOPT_POST, 1);

// Set cURL to use a login:password for access
curl_setopt($curl, CURLOPT_USERPWD, "[1100033004]:[1FC8AED1543C699B]");

// Add some custom header info
curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-type: text/json'));

// Use Heredoc syntax to encapsulate data, to avoid having to escape a million quotes
$data = <<<EOD
{
"DocDate": "2013-12-23",
"CustomerCode": "12345678123456781234567812345678",
"CompanyCode": "EGU",
"DocType": "SalesInvoice",
"Commit": false,
"Client": "Cool ERP,3,5",
"DocCode": "29",
"DetailLevel": "Tax",
"CustomerUsageType": "G",
"ExemptionNo": "12334",
"Discount": 0,
"PurchaseOrderNo":"PO 23423",                                        
"ReferenceCode":"",                                                        
"PosLaneCode":"",                                                                        
"BusinessIdentificationNo":"",
"TaxOverride":
{
"Reason":"Item Returned",
"TaxDate":"2013-05-05",
"TaxOverrideType":"TaxDate"
},
"Addresses":
[
{
"AddressCode": "Origin",
"Line1": "269",
"Line2": "7723 Tylers Place Blvd",
"City": "West Chester",
"Region": "OH",
"PostalCode": "45069-4684",
"Country": "US"
},
{
"AddressCode": "Dest",
"Line1": "1060 W. Addison St",
"City": "Chicago",
"Region": "IL",
"PostalCode": "60613-4566",
"Country": "US"
}
],
"Lines":
[
{
"LineNo": "00001",
"DestinationCode": "Dest",
"OriginCode": "Origin",
"ItemCode": "SP-001",
"Description": "Eyeglasses",
"TaxCode": "PC030147",
"Qty": 1,
"Amount": 100
}
]
}
EOD;
// That EOD ends the encapsulation via Heredoc syntax
// Note that the actual code does not indent the closing of Heredoc; only indented for stack overflow code view

// Set the POST data
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);

// Execute the transaction
$r = curl_exec($curl);

// Close the connection
curl_close($curl);

// Print the results for debugging
print_r($r);

然而,当我试图查看网页时,我什么也没看到--没有错误消息,没有结果,什么也没有。

我看过这里关于堆栈溢出和php手册的其他一些文章--我现在还不确定如何调试它,因为我没有收到任何错误消息。任何想法都将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-23 11:31:42

这是一个演示示例,演示如何在PHP中使用API --这可能有助于您将一些数据发布到API中

代码语言:javascript
复制
$url = '<your url here>';
$curl = curl_init($url);

$data_string = '[
    {
        "FirstName": "Value"
    },
    {
        "EmailAddress": "Value"
    },
    {
        "Phone": "Value"
    }
]';

    curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "POST");
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($curl, CURLOPT_HEADER, 0);
    curl_setopt($curl, CURLOPT_POSTFIELDS, $data_string);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($curl, CURLOPT_HTTPHEADER, array(
                                                'Content-Type:application/json',
                                                'Content-Length:'.strlen($data_string)

                                            ));

    $json_response = curl_exec($curl);
    $curl_errorno = curl_errno($curl);
    $status = curl_getinfo($curl, CURLINFO_HTTP_CODE);

    if ($status) {
        echo 'Status is 200 OK! ';
    }else{
        echo "Sorry Something went wrong. Please retry!";
        curl_close($curl);
    }

弄清楚你在状态代码中得到了什么,这将对你有帮助。编辑

这将是您

代码语言:javascript
复制
$data_string=
'{
    "DocDate": "2013-12-23",
    "CustomerCode": "12345678123456781234567812345678",
    "CompanyCode": "EGU",
    "DocType": "SalesInvoice",
    "Commit": false,
    "Client": "Cool ERP,3,5",
    "DocCode": "29",
    "DetailLevel": "Tax",
    "CustomerUsageType": "G",
    "ExemptionNo": "12334",
    "Discount": 0,
    "PurchaseOrderNo": "PO 23423",
    "ReferenceCode": "",
    "PosLaneCode": "",
    "BusinessIdentificationNo": "",
    "TaxOverride": {
        "Reason": "Item Returned",
        "TaxDate": "2013-05-05",
        "TaxOverrideType": "TaxDate"
    },
    "Addresses": [
        {
            "AddressCode": "Origin",
            "Line1": "269",
            "Line2": "7723 Tylers Place Blvd",
            "City": "West Chester",
            "Region": "OH",
            "PostalCode": "45069-4684",
            "Country": "US"
        },
        {
            "AddressCode": "Dest",
            "Line1": "1060 W. Addison St",
            "City": "Chicago",
            "Region": "IL",
            "PostalCode": "60613-4566",
            "Country": "US"
        }
    ],
    "Lines": [
        {
            "LineNo": "00001",
            "DestinationCode": "Dest",
            "OriginCode": "Origin",
            "ItemCode": "SP-001",
            "Description": "Eyeglasses",
            "TaxCode": "PC030147",
            "Qty": 1,
            "Amount": 100
        }
    ]
}'

应答删除这一行的大括号如下

代码语言:javascript
复制
curl_setopt($curl, CURLOPT_USERPWD, "1100033004:1FC8AED1543C699B");
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20742311

复制
相关文章

相似问题

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