I get great performance in the request_token call.

I've racked my brain trying to come up with a way to send the same
oauth headers some other way (other than writing a php page or
something to do the same).  I'm using .Net 1.1 standard HTTPWebRequest
methods to do this.  I would expect them to detect the response
correctly.

If I can't figure some other way out of it, I'll have to try writing a
little curl request.  I'm sure there's something wrong with the way
I'm doing things, but I just can't see it.  The weird part is that if
there were something wrong with my oauth headers or signature or
something, I'd expect the page to return with an error, the timeout is
the unexpected part.

In case it helps, here's my oauth request method:

----------------------

  Public Shared Function GenerateOauthRequest(ByVal RequestUrl As
String, ByVal RequestMethod As String, ByVal ConsumerKey As String,
ByVal ConsumerSecret As String, ByVal OauthToken As String, ByVal
OauthTokenSecret As String, Optional ByVal IncludeOauthToken As
Boolean = False, Optional ByVal Data As String = Nothing, Optional
ByVal OauthVerifier As String = "", Optional ByVal OauthCallback As
String = "") As Hashtable

    Dim objRequest As HttpWebRequest

    Dim datNow As DateTime = Date.UtcNow
    Dim lngTimestamp As Long = DateToUnixTimestamp(datNow)
    Dim strNonce As String = IntegerToSerialNumber(lngTimestamp) &
GenerateToken(20)

    Dim strSignatureMethod As String = "HMAC-SHA1"
    Dim strHMACKey As String = ConsumerSecret & "&" & OauthTokenSecret
    Dim stbSignature As New StringBuilder
    Dim strSignature As String = ""

    stbSignature.Append(RequestMethod)
    stbSignature.Append("&")
    stbSignature.Append(UrlEncodeRFC(RequestUrl))

    Dim stbOAuthData As New StringBuilder
    If RequestMethod = "GET" And Not IsNothing(Data) Then
      If Data.Length > 0 Then
        stbOAuthData.Append(Data)
        stbOAuthData.Append("&")
      End If
    End If
    stbOAuthData.Append("oauth_consumer_key=")
    stbOAuthData.Append(ConsumerKey)
    stbOAuthData.Append("&oauth_nonce=")
    stbOAuthData.Append(strNonce)
    stbOAuthData.Append("&oauth_signature_method=")
    stbOAuthData.Append(strSignatureMethod)
    stbOAuthData.Append("&oauth_timestamp=")
    stbOAuthData.Append(lngTimestamp)
    If IncludeOauthToken And Not IsNothing(OauthToken) Then
      If OauthToken.Length > 0 Then
        stbOAuthData.Append("&oauth_token=")
        stbOAuthData.Append(OauthToken)
      End If
    End If
    If OauthVerifier.Length > 0 Then
      stbOAuthData.Append("&oauth_verifier=")
      stbOAuthData.Append(OauthVerifier)
    End If
    stbOAuthData.Append("&oauth_version=1.0")

    stbSignature.Append("&")
    stbSignature.Append(UrlEncodeRFC(stbOAuthData.ToString))

    strSignature = stbSignature.ToString

    Dim objHMAC As New HMACSHA1(Encoding.ASCII.GetBytes(strHMACKey))
    Dim bytMessage() As Byte = Encoding.ASCII.GetBytes(strSignature)
    Dim bytSignature() As Byte = objHMAC.ComputeHash(bytMessage)
    strSignature = Convert.ToBase64String(bytSignature)

    If RequestMethod = "GET" And Not IsNothing(Data) Then
      If Data.Length > 0 Then RequestUrl &= "?" & Data
    End If

    objRequest = WebRequest.Create(RequestUrl)
    objRequest.Timeout = 30000
    objRequest.Method = RequestMethod

    Dim stbAuthorizationHeader As New StringBuilder
    stbAuthorizationHeader.Append("OAuth realm=""" & RequestUrl &
"""")
    stbAuthorizationHeader.Append(",oauth_consumer_key=""" &
ConsumerKey & """")
    stbAuthorizationHeader.Append(",oauth_nonce=""" & strNonce & """")
    stbAuthorizationHeader.Append(",oauth_signature=""" &
UrlEncodeRFC(strSignature) & """")
    stbAuthorizationHeader.Append(",oauth_signature_method=""" &
strSignatureMethod & """")
    stbAuthorizationHeader.Append(",oauth_timestamp=""" & lngTimestamp
& """")
    If IncludeOauthToken And Not IsNothing(OauthToken) Then
      If OauthToken.Length > 0 Then
        stbAuthorizationHeader.Append(",oauth_token=""" &
UrlEncodeRFC(OauthToken) & """")
      End If
    End If
    If OauthVerifier.Length > 0 Then
      stbAuthorizationHeader.Append(",oauth_verifier=""" &
UrlEncodeRFC(OauthVerifier) & """")
    End If
    stbAuthorizationHeader.Append(",oauth_version=""1.0""")

    objRequest.Headers.Add("Authorization",
stbAuthorizationHeader.ToString)

    Dim hshReturn As New Hashtable
    Dim objResponse As HttpWebResponse
    Dim objReader As StreamReader
    hshReturn.Add("success", False)
    Try
      If RequestMethod = "POST" And Not IsNothing(Data) Then
        objRequest.ContentLength = Data.Length
        Dim objWriter As New StreamWriter(objRequest.GetRequestStream)
        objWriter.Write(Data.ToString)
        objWriter.Close()
      End If
      objResponse = objRequest.GetResponse
      If Not IsNothing(objResponse.Headers("Content-Location")) Then
hshReturn.Add("content_location", objResponse.Headers("Content-
Location"))
      objReader = New StreamReader(objResponse.GetResponseStream)
      hshReturn.Add("response", objReader.ReadToEnd())
      hshReturn("success") = True
    Catch objWebException As System.Net.WebException
      Dim strError As String = objWebException.Message
      objResponse = objWebException.Response
      If Not IsNothing(objResponse) Then strError &= vbCrLf &
objResponse.StatusDescription
      hshReturn.Add("errors", strError)
      hshReturn("success") = False
    Catch objException As Exception
      hshReturn.Add("errors", objException.Message)
      hshReturn("success") = False
    End Try

    Return hshReturn

  End Function

-----------------------

Thanks for any help,

Dave

-- 
Twitter developer documentation and resources: http://dev.twitter.com/doc
API updates via Twitter: http://twitter.com/twitterapi
Issues/Enhancements Tracker: http://code.google.com/p/twitter-api/issues/list
Change your membership to this group: 
http://groups.google.com/group/twitter-development-talk

Reply via email to