如何在php或javascript中使用请求创建POST

时间:2014-12-18 06:17:46

标签: javascript php post request

如何使用php或javascript for steam web API创建带有请求的帖子

示例帖子: https://api.steampowered.com/IEconService/CancelTradeOffer/v1/?key=STEAM_API_KEY&tradeofferid=TRADE_OFFER_ID

当我在浏览器中使用它时,我得到: 方法不允许 必须使用HTTP POST请求调用此API

在C#中,这写成:

    private bool CancelTradeOffer(ulong tradeofferid)
    {
        string options = string.Format("?key={0}&tradeofferid={1}", ApiKey, tradeofferid);
        string url = String.Format(BaseUrl, "CancelTradeOffer", "v1", options);
        Debug.WriteLine(url);
        string response = SteamWeb.Fetch(url, "POST", null, null, false);
        dynamic json = JsonConvert.DeserializeObject(response);

        if (json == null || json.success != "1")
        {
            return false;
        }
        return true;
    }

3 个答案:

答案 0 :(得分:2)

<强>更新

试试这个:

    $url = 'https://api.steampowered.com/IEconService/CancelTradeOffer/v1/';
    $postData = array();
    $postData['key'] = $STEAM_API_KEY;
    $postData['tradeofferid'] = $TRADE_OFFER_ID;

    $parameters=json_encode($postData);

    $headers = array(    "Accept-Encoding: gzip",
        "Content-Type: application/json");

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_HEADER, 1);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $parameters);
    $resultt = curl_exec($ch);

   var_dump($resultt);
    curl_close($ch);

或者将其用作POST值的函数

function httpPost($url,$params)
{
    $postData = '';
    //create name value pairs seperated by &
    foreach($params as $k => $v)
    {
        $postData .= $k . '='.$v.'&';
    }
    rtrim($postData, '&');

    $ch = curl_init();

    curl_setopt($ch,CURLOPT_URL,$url);
    curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
    curl_setopt($ch,CURLOPT_HEADER, false);
    curl_setopt($ch, CURLOPT_POST, count($postData));
    curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);

    $output=curl_exec($ch);

    curl_close($ch);
    return $output;

}

答案 1 :(得分:2)

如果您正在使用jQuery,那么有一个非常方便的功能来执行此操作。

$.post( "http://api.example.com/get-some-value", { name: "John", time: "2pm" })
  .done(function( data ) {
    alert( "Data Loaded: " + data );
  });

但是从JS调用它时要小心跨域ajax。

修改

评论。

你必须在你的页面中包含jQuery,然后你可以在jQuery提供的非常有用且方便的$(document).ready()中调用任何东西。

$(document).ready(function(){
     $.post( "http://api.example.com/get-some-value", { name: "John", time: "2pm" })
      .done(function( data ) {
        alert( "Data Loaded: " + data );
      });
})

答案 2 :(得分:-1)

最终答案:

PHP Curl Post,工作正常:)
请给WD点数:)

   $url = 'http://api.steampowered.com/IEconService/CancelTradeOffer/v1/';
    $postData = array();

    $postData['key'] = ""; // insert variable
    $postData['tradeofferid'] = ""; // insert variable

   $fields = '';
   foreach($postData as $key => $value) { 
      $fields .= $key . '=' . $value . '&'; 
   }
   rtrim($fields, '&');


   $post = curl_init();

   curl_setopt($post, CURLOPT_URL, $url);
   curl_setopt($post, CURLOPT_POST, count($postData));
   curl_setopt($post, CURLOPT_POSTFIELDS, $fields);
   curl_setopt($post, CURLOPT_RETURNTRANSFER, 1);

   $result = curl_exec($post);
    var_dump($result);
   curl_close($post);


jQuery Post,工作正常:)
请给SRC点数:)

<script src="jquery-1.11.1.min.js"></script>

<script>
$(document).ready(function(){
     $.post( "http://api.steampowered.com/IEconService/CancelTradeOffer/v1/", { key: "SteamApiKey", tradeofferid: "TradeOfferID" })
      //This part does not work -- but is not needed to post data
      //.done(function( data ) {
      //  alert( "Data Loaded: " + data );
      //});
})
</script>


在PHP使用中检查交易要约状态:

//Check if trade offer was canceled
    //Get File and avoid error if the server is down
    $CheckTradeOfferID = ""; // add variable
    $BotSteamApiKey = ""; // add variable
    if (!$data = @file_get_contents("https://api.steampowered.com/IEconService/GetTradeOffer/v1/?key=".$BotSteamApiKey."&tradeofferid=".$CheckTradeOfferID."&format=json")) {
        print 'Steam Api is Down';
    } else {
        $json=json_decode($data,true);

        $TradeOffersResponse = $json['response'];
        if (empty($TradeOffersResponse)) { 
            print "Trade Offer ID not found!!!";
        }else{ 
            $trade_offer_state = $json['response']['offer']['trade_offer_state'];

            $TRANSLATE_Trade_Offer_State = "Unknown";
            if($trade_offer_state == "1"){ $TRANSLATE_Trade_Offer_State = "Invalid"; }
            if($trade_offer_state == "2"){ $TRANSLATE_Trade_Offer_State = "Trade Offer Sent"; }
            if($trade_offer_state == "3"){ $TRANSLATE_Trade_Offer_State = "Trade Offer Accepted"; }
            if($trade_offer_state == "4"){ $TRANSLATE_Trade_Offer_State = "The User Sent A Counter Offer"; }
            if($trade_offer_state == "5"){ $TRANSLATE_Trade_Offer_State = "Trade Offer not accepted before the expiration date"; }
            if($trade_offer_state == "6"){ $TRANSLATE_Trade_Offer_State = "The sender cancelled the offer"; }
            if($trade_offer_state == "7"){ $TRANSLATE_Trade_Offer_State = "User Declined the Trade Offer"; }
            if($trade_offer_state == "8"){ $TRANSLATE_Trade_Offer_State = "Some of the items in the offer are no longer available"; }

            print $TRANSLATE_Trade_Offer_State;
        }
    }