【问题标题】:Sending Data to API Via HTTP Post通过 HTTP Post 向 API 发送数据
【发布时间】:2017-02-09 02:47:40
【问题描述】:

我需要调用 API 来保存购物车订单。要获取订单的内容,很简单:

https://domain.com/GetCart/{SessionID}

上面的 URL 返回一个包含数据的 XML 文件。

不过,要保存购物车内容,我不确定我必须做什么。所有文档都说:

使用带有以下参数的 HTTP Post 保存购物车:

  • session_id
  • 名字
  • 姓氏
  • 城市

等等

我必须将该数据发送到:

https://domain.com/SaveCart/{SessionID}

我的问题是,如何通过 HTTP Post 发送该数据?我必须将https://domain.com/SaveCart/{SessionID} 放在表单的操作参数中吗?例如:

<form action="https://domain.com/SaveCart/{SessionID}">

通常如何通过 HTTP Post 向 API 发送数据?

【问题讨论】:

  • 考虑使用AJAX发送数据?
  • 没有 AJAX,只有 HTTP 发布。
  • 既然你已经标记了 PHP,你最好运行一个 CURL 请求。 This 是一个很好的例子。
  • 非常酷,达伦!我之前使用 cURL 完成了 HTTP 帖子。谢谢你。 :)
  • 别担心人:)

标签: php api http-post


【解决方案1】:

您需要使用 POST 进行 cURL 调用,将必填字段作为 post 字段传递。

如果你传递它,下面的 curl() 函数将执行此操作:

$url = 'https://domain.com/SaveCart/{SessionID}';

将 {SessionID} 替换为会话 ID 并且:

$fields[ 'first_name' ] = 'Bob';
$fields[ 'last_name' ]  = 'Smith';
$fields[ 'city' ]       = 'Seattle';

将 Bob、Smith 和 Seattle 替换为相关文字;

然后将函数调用为:

$result = curl( $url, $fields );

curl() 下面的 URLify 函数由 curl() 调用,以将 $fields 转换为 POST 所需的格式。

function curl( $url, $fields = FALSE, $encode = TRUE, $tries = 1 ) {

  $ch = curl_init();
  curl_setopt( $ch, CURLOPT_URL, $url );

  if ( ( $fields == FALSE ) ) {
    curl_setopt( $ch, CURLOPT_HEADER, 0 );
    curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
  } else {
    if ( is_array( $fields ) ) {
      $fields_string = URLify( $fields, $encode );
      curl_setopt( $ch, CURLOPT_POST, count( $fields ) );
    } else {
      $fields_string = $fields;
      curl_setopt( $ch, CURLOPT_POST, 1 );
    }
    curl_setopt( $ch, CURLOPT_POSTFIELDS, $fields_string );
    curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
    curl_setopt( $ch, CURLOPT_TIMEOUT, 60 );
  }

  do {

    $output = curl_exec( $ch );

    $tries = $tries - 1;

    if ( ( curl_errno( $ch ) <> FALSE ) AND ( $tries > 0 ) ) {
      echo 'ERROR in curl: WILL RETRY AFTER 1 SECOND SLEEP! error number: ' . curl_errno( $ch ) . ' error : ' . curl_error( $ch ) . " url: $url";
      sleep( 1 );
    }

  } while ( ( curl_errno( $ch ) <> FALSE ) AND ( $tries > 0 ) );

  // Check if any error occurred
  if ( curl_errno( $ch ) ) {
    echo 'ERROR in curl: NO MORE RETRIES! error number: ' . curl_errno( $ch ) . ' error : ' . curl_error( $ch ) . " url: $url";
  }

  curl_close( $ch );
  return $output;

}

此函数由 curl() 函数调用:

function URLify( $arr, $encode = FALSE ) {

    $fields_string = '';
    foreach( $arr as $key => $value ) {
        if ( $encode ) {
      $key = urlencode( $key );
            $value = urlencode( $value );
        }
        $fields_string .= $key . '=' . $value . '&';
    }
    $fields_string = substr( $fields_string, 0, ( strlen( $fields_string ) - 1 ) );

    return $fields_string;

}

【讨论】:

  • 非常感谢您的详细解释。
  • @GTSJoe 很高兴我能帮上忙
猜你喜欢
  • 2012-11-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-30
  • 2014-03-12
  • 2010-12-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多