6

I am trying to connect to Webtrend's API using PHP but haven't been able to authenticate.

The example given on the WT's documentation is for .NET or Ruby, the .Net example is like this:

var svc = new WebClient();
        svc.Credentials = new NetworkCredential("yourWebTrendsAccount\WebTrendsUserName", "yourSuperSecretPassword");
        svc.DownloadStringCompleted += svc_DownloadStringCompleted;
        svc.DownloadStringAsync(new Uri(baseUri));

I am not familiar with .NET, but is there an equivalent of that WebClient class on PHP?

I have been trying to authenticate using CURL using

username = "my_account_name/my_login_name" 
password = "my_password" 

but so far no luck. I get an error message saying that the parameters are not correct.

Update: adding code

    $username=urlencode('my_account_name\my_login_name');
    $password="my_password";


    $postdata="username=$username&password=$password";

    $ch = curl_init();
    curl_setopt ($ch, CURLOPT_URL,"https://ws.webtrends.com/v2/ReportService/profiles/XXXXXXXX/reports/XXXXXXXX/?totals=all&period=2011w14&format=xml");
    curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, TRUE);
    curl_setopt ($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6");
    curl_setopt ($ch, CURLOPT_TIMEOUT, 60);
    curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);

    curl_setopt ($ch, CURLOPT_POSTFIELDS, $postdata);
    curl_setopt ($ch, CURLOPT_POST, 1);
    $result = curl_exec ($ch);
    curl_close($ch);
    var_dump($result);

I also tried

curl_setopt($ch, CURLOPT_USERPWD, "$username:$password");

but no luck so far.

Bill the Lizard
  • 398,270
  • 210
  • 566
  • 880
Jon
  • 766
  • 1
  • 9
  • 27
  • show details of your php script – Ibu May 16 '11 at 07:54
  • i fixed the problem. after looking at the error message in the http headers ('SSL certificate problem, verify that the CA cert is OK') I added these lines to the code and now it works: – Jon May 16 '11 at 14:41
  • curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, 0); curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, 0); – Jon May 16 '11 at 14:41
  • Would be much easier with PHP.NET http://stackoverflow.com/q/1883956/78782 – Adam Harte May 22 '11 at 21:39

2 Answers2

1

I think you have to use CURLOPT_USERPWD instead of postdata:

$connection = curl_init();
curl_setopt($connection, CURLOPT_URL, 'https://ws.webtrends.com/v2/ReportService/profiles/XXXXXXXX/reports/XXXXXXXX/?totals=all&period=2011w14&format=xml');
curl_setopt($connection, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($connection, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt(CURLOPT_USERPWD, sprinf('%s:%s', $username, $password))
$data = curl_exec();
curl_close($ch); 
Kevin
  • 1,232
  • 10
  • 28
0

@Kevin Horst provided a good example of executing a basic authentication request with curl and PHP. I often need to do this via the command line. To do this you need curl installed on your system.

 curl --user username:password \
-i https://ws.webtrends.com/v2/ReportService/profiles/XXXXXXXX/reports/XXXXXXXX/?totals=all&period=2011w14&format=xml

According to the documentation on the WebTrends Data Extraction API. They use Basic Authentication over SSL which is a standard for RESTful authentication.

WebTrends Data extraction API

Tass Skoudros
  • 694
  • 4
  • 6