Once my previous change is made, I run the code below. It's a simple
example of connecting to the Google server using username/password
authentication and retrieving the list of calendars.
require_once 'Zend/Loader.php';
Zend_Loader::loadClass('Zend_Gdata');
Zend_Loader::loadClass('Zend_Gdata_AuthSub');
Zend_Loader::loadClass('Zend_Gdata_ClientLogin');
Zend_Loader::loadClass('Zend_Gdata_Calendar');
Zend_Loader::loadClass('Zend_Http_Client');
$service = Zend_Gdata_Calendar::AUTH_SERVICE_NAME;
$user = '[EMAIL PROTECTED]';
$pass = 'XXXXXXX';
$config = array(
'adapter' => 'Zend_Http_Client_Adapter_Proxy',
'proxy_host' => 'proxy.shr.secureserver.net',
'proxy_port' => 3128
);
try {
$http = new Zend_Http_Client();
$http->setConfig($config);
$client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass,
$service, $http);
var_dump($client);
$http->setConfig($config);
$gdataCal = new Zend_Gdata_Calendar($client);
$calFeed = $gdataCal->getCalendarListFeed();
foreach ($calFeed as $calendar) {
echo '<li>' . $calendar->title() . '</li>';
}
} catch (Zend_Exception $e) {
var_dump($e);
}
When I run this it fails and dumps the error. I'll cut to the chase
and show you what I sent...
POST https://www.google.com:443/accounts/ClientLogin HTTP/1.1
Host: www.google.com
Connection: close
User-agent: Zend-ZendFramework Zend_Framework_Gdata/1.0.0RC2
Content-type: application/x-www-form-urlencoded
Content-length: 115
accountType=HOSTED_OR_GOOGLE&Email=crazyatlantaguy
%40gmail.com&Passwd=XXXXXX&service=cl&source=Zend-ZendFramework
...and the dump containing what I received in return...
["last_response:protected"]=>
object(Zend_Http_Response)#5 (5) {
["version:protected"]=>
string(3) "1.0"
["code:protected"]=>
int(501)
["message:protected"]=>
string(15) "Not Implemented"
["headers:protected"]=>
array(8) {
["Server"]=>
string(18) "squid/2.6.STABLE12"
["Date"]=>
string(29) "Thu, 14 Jun 2007 12:29:47 GMT"
["Content-type"]=>
string(9) "text/html"
["Content-length"]=>
string(4) "1093"
["Expires"]=>
string(29) "Thu, 14 Jun 2007 12:29:47 GMT"
["X-squid-error"]=>
string(15) "ERR_UNSUP_REQ 0"
["X-cache"]=>
string(27) "MISS from wc02.shr.phx3.gdg"
["Proxy-connection"]=>
string(5) "close"
}
["body:protected"]=>
string(1093) "
ERROR
The requested URL could not be retrieved
While trying to retrieve the URL: https://www.google.com/accounts/ClientLogin
The following error was encountered:
* Unsupported Request Method and Protocol
Squid does not support all request methods for all access protocols.
For example, you can not POST a Gopher request.
Your cache administrator is webmaster.
Generated Thu, 14 Jun 2007 12:29:47 GMT by wc02.shr.phx3.gdg (squid/
2.6.STABLE12)
"}}
This is this reason that I contacted GoDaddy and was told that their
proxy does not support POST over outgoing SSL. Which I agree does not
make any sense. How you can you just ban key parts of HTTP? I
attempted to modify the ClientLogin code further to make this
authentication request us GET instead of POST. Although I believe I
made the right change (it works as a URL the browser) I still receive
this message from the proxy.
On Jun 14, 9:12 am, CrazyAtlantaGuy <[EMAIL PROTECTED]> wrote:
> First - A suggested change for google's implementation of the
> framework in PHP.
>
> Within the file \Zend\GData\ClientLogin.php there are conditions while
> creating the client HTTP object which can cause it to fail without
> throwing an exception. This is why people have discussed their
> $client variable being null. There is an error here, we just don't
> see it because of a bug which causes it to return null instead.
>
> To fix this in the most recent release of Zend, RC2, modify line 142
> so that instead of reading:
> } elseif ($response->getStatus() == 403) {
> it reads
> } else {
>
> Now when an unexpected error code is returned an exception is thrown.
> Previously exceptions were only thrown for 403 errors - not too
> helpful in our case.
>
> On Jun 14, 8:20 am, "[EMAIL PROTECTED]" <[EMAIL PROTECTED]> wrote:
>
> > My ultimate goal is quite simple, all I really want to do is read my
> > event data so I can generate an RSS feed that can be fed into tumblr.
>
> > I called godaddy, just on the off chance they'd be able to tell me
> > problems I'd encounter, and got a lot of "We don't help with coding"
> > and then when I just asked to make sure if it was even possible on
> > their shared hosting they told me it was, but that it'd be difficult.
>
> > Anyway using the help from this thread, along with the manual I
> > crafted:
>
> > $config = array(
> > 'adapter' => 'Zend_Http_Client_Adapter_Proxy',
> > 'proxy_host' => 'proxy.shr.secureserver.net',
> > 'proxy_port' => 3128
> > );
> > // Instantiate a client object
> > $clientp = new Zend_Http_Client($myCalendar, $config);
> > $client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, 'cl',
> > $clientp);
> > $service = new Zend_Gdata_Calendar($client);
>
> > try {
> > $listFeed= $service->getCalendarListFeed();} catch
> > (Zend_Gdata_App_Exception $e) {
>
> > echo "Error: " . $e->getResponse();
>
> > }
>
> > I get the Error every time, and I did some other testing and the
> > $client variable is null. I also am not setting $myCalendar because I
> > wasn't entirely clear and what that should be. I tried putting names
> > of my calendars in there, which those caused invalid schema errors, I
> > also tried the addresses of my feeds, which didn't throw errors, but
> > didn't improve the situation.
>
> > I also tried getting events instead of calendars with the same
> > results. At this point I'm not sure if it's an error with goDaddy, or
> > just my not understanding how to use the API.
> > On Jun 14, 1:08 am, "Ryan Boyd (Google)" <[EMAIL PROTECTED]> wrote:
>
> > > Hi CrazyAtlantaGuy,
>
> > > That seems a bit odd that POST would not be allowed, as it's a common
> > > method of HTTP communication-- used in many web sites for form data
> > > and also used by lots of different APIs.
>
> > > What operations were you performing at the time you received the
> > > timeout errors? Was it adding new entries, or updating/deleting
> > > entries? If the latter, the PUT/DELETE methods are used by default.
> > > These methods are less common and much more likely to be blocked by a
> > > proxy server. Fortunately, there is an option in Zend_Gdata_Calendar
> > > (via way of Zend_Gdata_App) to indicate that you want POST requests to
> > > be used in place of PUTs/DELETEs. This is set by calling
> > > $calendarService->setHttpMethodOverride(true); Setting this property
> > > tells the library to sent HTTP POSTS but add a 'X-Http-Method-
> > > Override' header indicating that PUT or DELETE was the intentioned
> > > method.
>
> > > If it really is POST being disallowed, then the only other major
> > > remaining methods are GET and HEAD. It is highly unlikely that any
> > > insert/update/delete operations will ever work with Google data APIs
> > > using these HTTP verbs as GET and HEAD requests should not have any
> > > side-effects based upon the HTTP spec.
>
> > > Also, for future debugging-- any HTTP errors should throw an instance
> > > of Zend_Gdata_App_HttpException. This provides a method called
> > > getResponse() which returns the Zend_Http_Response object. Just
> > > var_dump this and you should have any information you want about the
> > > server error.
>
> > > Good luck in getting this resolved!
>
> > > Cheers,
> > > -Ryan
>
> > > On Jun 13, 5:32 pm, CrazyAtlantaGuy <[EMAIL PROTECTED]> wrote:
>
> > > > I've been working on this recently too and have run into the same
> > > > troubles. I was able to avoid the timeout error by using the proxy -
> > > > however now that I can connect to the proxy the communications with
> > > > google still fails. Adding lots of print lines to the Zend code I
> > > > have found that the proxy is sending back an HTTP error message,"501
> > > > Not Implemented." After several emails with GoDaddy support I've been
> > > > told "it appears that our hosting does not support the 'POST' option
> > > > when using our proxy service". The Google's PHP code does all of it's
> > > > communications by POSTs, which means that as things stand it using the
> > > > Zend Framework as-is to communicate with Google just won't work.
>
> > > > It would be really nice if GoDaddy realized having the proxy caused
> > > > their customers a real headache and just got ride of it. The only
> > > > other solutions, so I see it, is to rewrite parts of the Google PHP so
> > > > that it no longer sends and retrieves using POSTs. Well, there's
> > > > always the option of finding another host, which may be the easier of
> > > > the two.
>
> > > > Any other ideas or solutions would be most appreciated.
>
> > > > On Jun 13, 3:41 pm, "[EMAIL PROTECTED]" <[EMAIL PROTECTED]> wrote:
>
> > > > > I'm trying to do something similar, and the code you provided got me
> > > > > to stop having the connection error, however when I use the code
> > > > > similar to yours above, only putting in my user and pass, I end up
> > > > > getting a null client returned.
>
> > > > > I'm also unsure what the $myCalendar variable should be set to.... or
> > > > > if I need to call some other kind of function before I can do this.
>
> > > > > On Jun 8, 1:00 pm, Erik <[EMAIL PROTECTED]> wrote:
>
> > > > > > Hi, this is not helping. However, In theGodaddyhelp I found out
> > > > > > thatGodaddyuses a proxy for the google checkout application. So I
> > > > > > tried
> > > > > > to use this proxy settings and it seems to be working.
> > > > > > This is what I used:
>
> > > > > > $config = array(
> > > > > > 'adapter' => 'Zend_Http_Client_Adapter_Proxy',
> > > > > > 'proxy_host' => 'proxy.shr.secureserver.net',
> > > > > > 'proxy_port' => 3128
> > > > > > );
> > > > > > // Instantiate a client object
> > > > > > $clientp = new Zend_Http_Client($myCalendar, $config);
> > > > > > $client = Zend_Gdata_ClientLogin::getHttpClient($user,
> > > > > > $pass,
> > > > > > 'cl', $clientp);
>
> > > > > > On 8 jun, 19:19, "Lane LiaBraaten (Google)" <[EMAIL PROTECTED]>
> > > > > > wrote:
>
> > > > > > > Hi Erik,
>
> > > > > > > cederstrom posted this link in another
> > > > > > > thread:http://www.nabble.com/SSLv2-error-when-using-Gdata-API-t2960985s16154...
>
> > > > > > > Let us know if that solves your problem,
> > > > > > > Lane
>
> > > > > > > On Jun 8, 7:54 am, Erik <[EMAIL PROTECTED]> wrote:
>
> > > > > > > > When I try to authenticate I get the following error:
>
> > > > > > > > Fatal error: Uncaught exception 'Zend_Gdata_HttpException' with
> > > > > > > > message 'Unable to Connect to sslv2://www.google.com:443. Error
> > > > > > > > #110:
> > > > > > > > Connection timed out' in
> > > > > > > > /home/content/d/i/s/dispuutjupiter/html/Zend/
> > > > > > > > Gdata/AuthSub.php:106 Stack trace: #0
>
> > > > > > > > My site is hosted atgodaddyand I'm running PHP Version 5.1.4.
> > > > > > > > To me
> > > > > > > > it seems that the problem is located in the ClientLogin.php
> > > > > > > > file.
>
> > > > > > > > Can anyone help me to get this working?
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Google Calendar Data API" group.
To post to this group, send email to
[email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at
http://groups.google.com/group/google-calendar-help-dataapi?hl=en
-~----------~----~----~----~------~----~------~--~---