lalith kkvn
lalith kkvn

Reputation: 310

Google Adwords Reporting HTTP POST request returns 400 response code

I am trying to use Google Adwords Reporting HTTP POST request to retrieve stats for a list of keywords that could exist under multiple Campaigns/Adgroups. This is the API documentation that I was referring to https://developers.google.com/adwords/api/docs/guides/reporting#prepare-the-http-post-request.

Below is scala code that returns 400 error code. What am I doing wrong ? Or is there another way of retrieving data from KEYWORDS_PERFORMANCE_REPORT report type ?

      val httpClient = new DefaultHttpClient()
      val postRequest=new HttpPost("https://adwords.google.com/api/adwords/reportdownload/v201605")
      postRequest.addHeader("Host","adwords.google.com")
      postRequest.addHeader("User-Agent", "curl, gzip")
      postRequest.addHeader("Accept","*/*")
      postRequest.addHeader("Expect","100-continue")
      postRequest.addHeader("Accept-Encoding","gzip")
      postRequest.addHeader("Content-Type","multipart/form-data; boundary=------------------------12d01fae60c7b559; charset=utf-8")
      postRequest.addHeader("Authorization","Bearer 1/*************************************")
      postRequest.addHeader("developerToken","/*************************************")")
      postRequest.addHeader("clientCustomerId","/*************************************")")
      postRequest.addHeader("Parameters","__rdxml: <?xml version=\"1.0\" " +
        "encoding=\"UTF-8\"?>" +
        "<reportDefinition>" +
        "  <selector>" +
        "    <fields>CampaignId</fields>" +
        "    <fields>AdGroupId</fields>" +
        "    <fields>Id</fields>" +
        "    <fields>Criteria</fields>" +
        "    <fields>CriteriaType</fields>" +
        "    <fields>Impressions</fields>" +
        "    <fields>Clicks</fields>" +
        "    <fields>Cost</fields>" +
        "    <predicates>" +
        "      <field>Status</field>" +
        "      <operator>NOT_IN</operator>" +
        "      <values>PAUSED</values>" +
        "    </predicates>" +
        "  </selector>" +
        "  <reportName>Criteria performance report #56bd904878715</reportName>" +
        "  <reportType>CRITERIA_PERFORMANCE_REPORT</reportType>" +
        "  <dateRangeType>LAST_7_DAYS</dateRangeType>" +
        "  <downloadFormat>CSV</downloadFormat>" +
        "</reportDefinition>")
      val httpResponse=httpClient.execute(postRequest)
      println(httpResponse.getStatusLine.toString)

Upvotes: 0

Views: 812

Answers (1)

dorian
dorian

Reputation: 6292

Your report definition should go into the POST request's body encoded either as application/x-www-form-urlencoded or multipart/form-data—in your code you are adding it as a header called Parameters.

Upvotes: 0

Related Questions