this is the complete source, please help me find the error in my code that is giving me this UploadBean error that there site is sending back to me!
#include "stdafx.h"
using namespace System;
using namespace System::Net;
using namespace System::IO;
using namespace System::Text;
using namespace System::Security::Cryptography::X509Certificates;
using namespace System::Net::Cache;
using namespace System::Web;
String^ Boundary()
{
String^ sBoundary;// = gcnew String("");
Random^ random = gcnew Random((int)DateTime::Now.Ticks);
for(int i=0; i<=12; i++)
{
char c=0;
while(!Char::IsLetterOrDigit(c))
c = random->Next() % 96 + 32;
sBoundary += Char::ConvertFromUtf32(c);
}
return sBoundary;
}
int main(array<System::String ^> ^args)
{
String^ sPassword = gcnew String("");
String^ sFileName = gcnew String("");
if(args->Length == 0)
{
Console::WriteLine("No Command Line Arguments found");
Console::WriteLine("--pass[password] : enter your login password for DTCC");
Console::WriteLine("--filename[filename] : file to be uploaded to DTCC");
Console::WriteLine("Note: file to be uploaded must be in the same Directory as this upload utility");
return 0;
}
for(int x=0; x<args->Length; x++)
{
if(args[x]->Contains("--pass"))
{
sPassword = args[x]->Remove(0, args[x]->IndexOf('[')+1);
sPassword = sPassword->Remove(sPassword->IndexOf(']'), 1);
}
else if(args[x]->Contains("--filename"))
{
sFileName = args[x]->Remove(0, args[x]->IndexOf('[')+1);
sFileName = sFileName->Remove(sFileName->IndexOf(']'), 1);
}
else
{
Console::WriteLine("unknown argument");
return 0;
}
}
if(String::IsNullOrEmpty(sPassword) || String::IsNullOrEmpty(sFileName))
{
Console::WriteLine("missing arguments");
return 0;
}
FileStream^ fs;
StreamReader^ sr;
try
{
fs = gcnew FileStream(sFileName, FileMode::Open);
sr = gcnew StreamReader(fs, Encoding::ASCII);
}
catch(FileNotFoundException^ e)
{
Console::WriteLine ("{0}", e->Message);
return 0;
}
String^ sFileData = gcnew String(sr->ReadToEnd());
String^ sBoundary = gcnew String(Boundary());
sr->Close();
fs->Close();
X509Store^ certStore = gcnew X509Store("MY", StoreLocation::CurrentUser);
try
{
certStore->Open(OpenFlags::ReadOnly | OpenFlags::OpenExistingOnly);
}
catch(ArgumentException^ e)
{
Console::WriteLine ("{0}", e->Message);
return 0;
}
CookieCollection^ cookieCollection = gcnew CookieCollection();
Uri^ uri = gcnew Uri("https://pcwd.dtcc.com/");
//request 1
HttpWebRequest^ request = (HttpWebRequest^)WebRequest::Create("https://pcwd.dtcc.com/dsv/servlet/login?system=dsv");
request->ContentType = "application/x-www-form-urlencoded";
request->Method = "POST";
request->AutomaticDecompression = DecompressionMethods::GZip | DecompressionMethods::Deflate;
request->DefaultCachePolicy = gcnew RequestCachePolicy(RequestCacheLevel::NoCacheNoStore);
request->AllowAutoRedirect = true;
request->CookieContainer = gcnew CookieContainer();
request->AllowAutoRedirect = true;
request->ClientCertificates = certStore->Certificates;
request->KeepAlive = true;
//post 1
Stream^ postStream = request->GetRequestStream();
String^ postData = String::Concat("login_system=dsv&opid=90&password=", sPassword);
array<Byte>^ ByteArray = Encoding::UTF8->GetBytes(postData);
postStream->Write(ByteArray, 0, postData->Length);
postStream->Close();
//response 1
HttpWebResponse^ response = dynamic_cast<HttpWebResponse^>(request->GetResponse());
cookieCollection->Add(request->CookieContainer->GetCookies(uri));
response->Cookies = cookieCollection;
Stream^ streamResponse = response->GetResponseStream();
StreamReader^ streamRead = gcnew StreamReader(streamResponse);
String^ responseString = streamRead->ReadToEnd();
streamResponse->Close();
streamRead->Close();
response->Close();
//request 2
request = (HttpWebRequest^)WebRequest::Create("https://pcwd.dtcc.com/dsv/action/OTCSignon?system=dsv");
request->ContentType = "application/x-www-form-urlencoded";
request->Method = "POST";
request->AutomaticDecompression = DecompressionMethods::GZip | DecompressionMethods::Deflate;
request->DefaultCachePolicy = gcnew RequestCachePolicy(RequestCacheLevel::NoCacheNoStore);
request->AllowAutoRedirect = true;
request->CookieContainer = gcnew CookieContainer();
request->AllowAutoRedirect = true;
request->ClientCertificates = certStore->Certificates;
request->CookieContainer->Add(cookieCollection);
request->KeepAlive = true;
//post 2
postStream = request->GetRequestStream();
postData = "isFirstTime=false&isMultipleOriginators=false&testProdIndicator=P";
ByteArray = Encoding::UTF8->GetBytes(postData);
postStream->Write(ByteArray, 0, postData->Length);
postStream->Close();
//response 2
response = dynamic_cast<HttpWebResponse^>(request->GetResponse());
response->Cookies = cookieCollection;
streamResponse = response->GetResponseStream();
streamRead = gcnew StreamReader(streamResponse);
responseString = streamRead->ReadToEnd();
streamResponse->Close();
streamRead->Close();
response->Close();
//****** Not sending file correctly, or is but not receiving correct response
//request 3
request = (HttpWebRequest^)WebRequest::Create("https://pcwd.dtcc.com/dsv/action/upload");
request->Accept = "image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*";
request->Referer = "https://pcwd.dtcc.com/dsv/action/upload";
request->Headers->Add("Accept-Language","en-us");
request->ContentType = String::Concat("multipart/form-data; boundary=", sBoundary);
request->Headers->Add("UA-CPU","x86");
request->Method = "POST";
request->AutomaticDecompression = DecompressionMethods::Deflate | DecompressionMethods::GZip;
request->UserAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)";
request->KeepAlive = true;
request->CachePolicy = gcnew RequestCachePolicy(RequestCacheLevel::NoCacheNoStore);
request->ClientCertificates = certStore->Certificates;
request->CookieContainer = gcnew CookieContainer();
request->CookieContainer->Add(cookieCollection);
request->ServicePoint->Expect100Continue = false;
request->AllowWriteStreamBuffering = true;
//post 3
//upload file
StringBuilder^ sData = gcnew StringBuilder();
sData->Append("--");
sData->Append(sBoundary);
sData->Append("\r\n");
sData->Append("Content-Disposition: form-data; name=\"firstTime\"");
sData->Append("\r\n\r\n");
sData->Append("F");
sData->Append("\r\n");
sData->Append("--");
sData->Append(sBoundary);
sData->Append("\r\n");
sData->Append("Content-Disposition: form-data; name=\"prevFileName\"");
sData->Append("\r\n\r\n");
sData->Append(sFileName);
sData->Append("\r\n");
sData->Append("--");
sData->Append(sBoundary);
sData->Append("\r\n");
sData->Append("Content-Disposition: form-data; name=\"theFile\"; filename=\"");
sData->Append(sFileName);
sData->Append("\"");
sData->Append("\r\n");
sData->Append("Content-Type: application/vnd.ms-excel");
sData->Append("\r\n\r\n");
sData->Append(sFileData);
sData->Append("\r\n");
sData->Append("--");
sData->Append(sBoundary);
sData->Append("--");
sData->Append("\r\n");
postData = sData->ToString();
ByteArray = Encoding::UTF8->GetBytes(postData);
postStream = request->GetRequestStream();
postStream->Write(ByteArray, 0, postData->Length);
postStream->Close();
//response 3
response = dynamic_cast<HttpWebResponse^>(request->GetResponse());
response->Cookies = cookieCollection;
streamResponse = response->GetResponseStream();
streamRead = gcnew StreamReader(streamResponse);
responseString = streamRead->ReadToEnd();
streamResponse->Close();
streamRead->Close();
response->Close();
//get results from the feed and write to console
//any error or confirmation messages should go here
Console::WriteLine(responseString);
return 0;
}