2

PowerShell を使用してツイートしようとしていますが、完全に機能させることができません。私は 1 つまたは 2 つのツイートをすることができます。はい、それぞれの間に数分待って、前のメッセージを繰り返さないでください。

その後、突然動作が停止し、GetRequestStream関数がハングします。何が起こっているのかわかりません。誰もこの問題に光を当てることができますか?

前もって感謝します!

[Reflection.Assembly]::LoadWithPartialName("System.Net")  

$status = [System.Uri]::EscapeDataString("tweet tweet");  
$oauth_consumer_key = "<key";  
$oauth_consumer_secret = "<secret>";  
$oauth_token = "<token>";  
$oauth_token_secret = "<secret>";  
$oauth_nonce = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes([System.DateTime]::Now.Ticks.ToString()));  
$ts = [System.DateTime]::UtcNow - [System.DateTime]::ParseExact("01/01/1970", "dd/MM/yyyy", $null).ToUniversalTime();  


$oauth_timestamp = [System.Convert]::ToInt64($ts.TotalSeconds).ToString();  

$signature = "POST&";  
$signature += [System.Uri]::EscapeDataString("https://api.twitter.com/1.1/statuses/update.json") + "&";    
$signature += [System.Uri]::EscapeDataString("oauth_consumer_key=" + $oauth_consumer_key + "&");  
$signature += [System.Uri]::EscapeDataString("oauth_nonce=" + $oauth_nonce + "&");   
$signature += [System.Uri]::EscapeDataString("oauth_signature_method=HMAC-SHA1&");  
$signature += [System.Uri]::EscapeDataString("oauth_timestamp=" + $oauth_timestamp + "&");  
$signature += [System.Uri]::EscapeDataString("oauth_token=" + $oauth_token + "&");  
$signature += [System.Uri]::EscapeDataString("oauth_version=1.0&");  
$signature += [System.Uri]::EscapeDataString("status=" + $status);  

$signature_key = [System.Uri]::EscapeDataString($oauth_consumer_secret) + "&" + [System.Uri]::EscapeDataString($oauth_token_secret);  

$hmacsha1 = new-object System.Security.Cryptography.HMACSHA1;  
$hmacsha1.Key = [System.Text.Encoding]::ASCII.GetBytes($signature_key);  
$oauth_signature = [System.Convert]::ToBase64String($hmacsha1.ComputeHash([System.Text.Encoding]::ASCII.GetBytes($signature)));  

$oauth_authorization = 'OAuth ';  
$oauth_authorization += 'oauth_consumer_key="' + [System.Uri]::EscapeDataString($oauth_consumer_key) + '",';  
$oauth_authorization += 'oauth_nonce="' + [System.Uri]::EscapeDataString($oauth_nonce) + '",';  
$oauth_authorization += 'oauth_signature="' + [System.Uri]::EscapeDataString($oauth_signature) + '",';  
$oauth_authorization += 'oauth_signature_method="HMAC-SHA1",'  
$oauth_authorization += 'oauth_timestamp="' + [System.Uri]::EscapeDataString($oauth_timestamp) + '",'  
$oauth_authorization += 'oauth_token="' + [System.Uri]::EscapeDataString($oauth_token) + '",';  
$oauth_authorization += 'oauth_version="1.0"';  

$post_body = [System.Text.Encoding]::ASCII.GetBytes("status=" + $status);   
[System.Net.HttpWebRequest] $request = [System.Net.WebRequest]::Create("https://api.twitter.com/1.1/statuses/update.json");  
$request.Method = "POST";  
$request.Headers.Add("Authorization", $oauth_authorization);  
$request.ContentType = "application/x-www-form-urlencoded";  
$body = $request.GetRequestStream();  
$body.write($post_body, 0, $post_body.length);  
$body.flush();  
$body.close();  
$response = $request.GetResponse();  
 $response.Close()

これは、最終的にタイムアウトしたときに発生する完全なエラー シーケンスです。

Exception calling "GetRequestStream" with "0" argument(s): "The operation has timed out"
At line:46 char:5
+     $body = $request.GetRequestStream();
+     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : WebException

Exception calling "Write" with "3" argument(s): "The request was aborted: The connection was closed unexpectedly."
At line:47 char:5
+     $body.write($post_body, 0, $post_body.Length);
+     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : WebException

Exception calling "GetResponse" with "0" argument(s): "You must provide a request body if you set ContentLength>0 or 
SendChunked==true.  Do this by calling [Begin]GetRequestStream before [Begin]GetResponse."
At line:50 char:5
+     $response = $request.GetResponse();
+     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : ProtocolViolationException
4

1 に答える 1

2

レスポンスストリームを閉じていますか?これらはデフォルトでキープアライブ接続であるため、それらの多くを開くと、2つの同時セッションが多いためにブロックされる可能性があります。使用してみてください:

$response.Close()
于 2013-02-20T06:30:20.570 に答える