After I added a reference to the Yedda.Twitter.dll, I tried working with the following code:
namespace TestingAPIs
{
using Yedda;
class Program
{
static void Main(string[] args)
{
var t = new Twitter();
t.Update(
"myUsername", // Username
"myPassword", // Password
"From Visual Studio", // New Status
Yedda.Twitter.OutputFormatType.JSON); // Output Type
}
}
}
Simple eh?
Well, much to my amazement, that threw an exception -_- ...obviously, it wouldn't as much fun if it worked on the first try eh!
So, after some googling, I found some posts that detailed the problem:
This error is seemingly because Twitter servers have started rejecting Expect HTTP header with value "100-Continue".
So anyways, to fix this problem we need to modify a method from the Twitter.cs file of the Yedda library.
Open up the file and find the following method: ExecutePostCommand
At the start of the method, add the following line of code:
System.Net.ServicePointManager.Expect100Continue = false;
That will fix the above problem.
Here is the complete modified method:
protected string ExecutePostCommand(string url, string userName, string password, string data) {
System.Net.ServicePointManager.Expect100Continue = false;
WebRequest request = WebRequest.Create(url);
if (!string.IsNullOrEmpty(userName) && !string.IsNullOrEmpty(password)) {
request.Credentials = new NetworkCredential(userName, password);
request.ContentType = "application/x-www-form-urlencoded";
request.Method = "POST";
if (!string.IsNullOrEmpty(TwitterClient)) {
request.Headers.Add("X-Twitter-Client", TwitterClient);
}
if (!string.IsNullOrEmpty(TwitterClientVersion)) {
request.Headers.Add("X-Twitter-Version", TwitterClientVersion);
}
if (!string.IsNullOrEmpty(TwitterClientUrl)) {
request.Headers.Add("X-Twitter-URL", TwitterClientUrl);
}
if (!string.IsNullOrEmpty(Source)) {
data += "&source=" + HttpUtility.UrlEncode(Source);
}
byte[] bytes = Encoding.UTF8.GetBytes(data);
request.ContentLength = bytes.Length;
using (Stream requestStream = request.GetRequestStream()) {
requestStream.Write(bytes, 0, bytes.Length);
using (WebResponse response = request.GetResponse()) {
using (StreamReader reader = new StreamReader(response.GetResponseStream())) {
return reader.ReadToEnd();
}
}
}
}
return null;
}