CANDY chat with Openfire : receiving empty response while connecting to a autologin chat room - openfire

I finally have the openfire server installed - admittedly noob to XMPP - but I'm getting there :)
I modified the .htaccess & now trying to hit the http://166.xx.xx.xx/candy-chat-candy-ca544b1/example/index.html on my server
The page shows me a "connecting.." message and hangs there.
Here is my setup before I delve into the firebug post/response.
I've modified the example/index.html as such :
$(document).ready(function() {
Candy.init('http://166.xx.xx.xx:7070/http-bind/', {
core: { debug: true },
autojoin: ['Opentalk#conference.166.xx.xx.xx'],
view: { language : 'en' }
});
Candy.Core.connect('166.xx.xx.xx', null, 'Guest'); // Connect anonymously to a specific server
});
In firebug, I see that the response is empty. However the post entry in firebug shows a 200 OK
And firebug complains (which I think is because the response is empty) --> "
XML Parsing Error: no element found Location:
moz-nullprincipal:{80250471-6b20-4144-ad88-92777a926018} Line Number
1, Column 1:
Here is the post
<body rid='3954428912' xmlns='http://jabber.org/protocol/httpbind' to='166.xx.xx.xx' xml:lang='en' wait='60' hold='1' content='text/xml;
charset=utf-8' ver='1.6' xmpp:version='1.0' xmlns:xmpp='urn:xmpp:xbosh'/>
Since my debug is turned on, I see the same message as post :
SENT: <body rid='3954428912' xmlns='http://jabber.org/protocol/httpbind' to='166.xx.xx.xx' xml:lang='en' wait='60' hold='1' content='text/xml;
charset=utf-8' ver='1.6' xmpp:version='1.0' xmlns:xmpp='urn:xmpp:xbosh'/>
Note : The only difference I see in my configuration is the the cross-domain part.
The setup screenshot shown on github has this field empty, while mine has the default entry, I don't know if that is in fact a problem though.
I'm doing something wrong, but can't put a finger as to what..
Any pointers about debugging further would be great !
----------------+++++++++++--------------
Update 2/1 **
Thanks Michael, seems making the changes has taken it a step forward !!
Now I'm getting a grey page instead of hanging at "connecting..".
Seems the connection is now being established. I'm not sure if the PrivacyListError is critical (correct me).
I looked into the candy.js & seems that if the list doesn't exist it'll create one.
The next error does seem critical, since it talks about service unavailable..
Success
SENT: <body rid='2569503371' xmlns='http://jabber.org/protocol/httpbind' sid='b967c785'><iq type='set' id='_session_auth_2' xmlns='jabber:client'><session xmlns='urn:ietf:params:xml:ns:xmpp-session'/></iq></body> RECV: <body xmlns='http://jabber.org/protocol/httpbind'><iq xmlns='jabber:client' type='result' id='_session_auth_2' to='b967c785#myservername.com/b967c785'/></body>
[Connection]
Connected [Jabber]
Anonymous login
[Connection] Attached
Success
POST http-bind/ 200 OK 101ms
SENT: <body rid='2569503372' xmlns='http://jabber.org/protocol/httpbind' sid='b967c785'><presence xmlns='jabber:client'/><iq type='get' xmlns='jabber:client'><query xmlns='jabber:iq:private'><storage xmlns='storage:bookmarks'/></query></iq><iq type='get' from='b967c785#myservername.com/b967c785' id='get1' xmlns='jabber:client'><query xmlns='jabber:iq:privacy'><list name='ignore'/></query></iq></body>
RECV: <body xmlns='http://jabber.org/protocol/httpbind'><iq xmlns='jabber:client' type='result' to='b967c785#myservername.com/b967c785'><query xmlns='jabber:iq:private'><storage xmlns='storage:bookmarks'/></query></iq></body>
[Jabber] Bookmarks
Error
POST http-bind/ 200 OK 56ms
SENT: <body rid='2569503373' xmlns='http://jabber.org/protocol/httpbind' sid='b967c785'/>
RECV: <body xmlns='http://jabber.org/protocol/httpbind'><iq xmlns='jabber:client' type='error' id='get1' to='b967c785#myservername.com/b967c785'><query xmlns='jabber:iq:privacy'><list name='ignore'/></query><error code='503' type='cancel'> <service-unavailable xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'/></error></iq></body>
[Jabber] PrivacyListError
Error - this seems more serious
POST http-bind/ 200 OK 74ms
SENT: <body rid='2569503374' xmlns='http://jabber.org/protocol/httpbind'
sid='b967c785'><iq type='set' from='b967c785#myservername.com/b967c785' id='set1'
xmlns='jabber:client'><query xmlns='jabber:iq:privacy'><list name='ignore'><item
action='allow' order='0'/></list></query></iq><iq type='set'
from='b967c785#myservername.com/b967c785' id='set2' xmlns='jabber:client'><query
xmlns='jabber:iq:privacy'><active name='ignore'/></query></iq></body>
RECV: <body xmlns='http://jabber.org/protocol/httpbind'><iq xmlns='jabber:client'
type='error' id='set1' to='b967c785#myservername.com/b967c785'><query
xmlns='jabber:iq:privacy'><list name='ignore'><item action='allow' order='0'/></list>
</query><error code='503' type='cancel'><service-unavailable
xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'/></error></iq></body>
Error - Last one, before it kinda hangs in the there
POST http-bind/ 200 OK 60ms
SENT: <body rid='2569503375' xmlns='http://jabber.org/protocol/httpbind' sid='b967c785'/>
RECV: <body xmlns='http://jabber.org/protocol/httpbind'><iq xmlns='jabber:client'
type='error' id='set2' to='b967c785#myservername.com/b967c785'><query
xmlns='jabber:iq:privacy'><active name='ignore'/></query><error code='503' type='cancel'>
<service-unavailable xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'/></error></iq></body>
Last ajax call fired
POST http-bind/ 200 OK 60167ms
SENT: <body rid='2569503376' xmlns='http://jabber.org/protocol/httpbind' sid='b967c785'/>
RECV: <body xmlns='http://jabber.org/protocol/httpbind'/>
POST http-bind/
SENT: <body rid='2569503377' xmlns='http://jabber.org/protocol/httpbind' sid='b967c785'/>

Your http-bind url seems to be wrong as well as the autojoin and the first param of the connect function call.
If you configured the HTTP Proxy configuration correctly, the standard example/index.html should work.
You only need to change/add the autojoin param and change the connect function call.
Regarding the autojoin parameter: You configured a virtualhost on the XMPP server. You need to use this one as the hostname, not the IP. So it would look like autojoin: ['Opentalk#conference.example.com'].
The same applies to the first parameter of connect() you need to provide the virtual hostname of the XMPP Server.

Related

Login issue with Restassured api testing

I tried to generate the token from login request.It is successful in postman tool and success in soapui groovy script.But I couldnot do via rest assured library.Below are the screenshot where the request uses Body - form-data with username and password.
I have tried the using queryparams, formparam but getting the below error.Kindly help me to solve the error.
<html>
<head><title>301 Moved Permanently</title></head>
<body bgcolor="white">
<center><h1>301 Moved Permanently</h1></center>
<hr><center>nginx/1.4.4</center>
</body>
</html>
Rest assured code:
Map<String, String> formParams = new HashMap<>();
formParams.put("username", "test");
formParams.put("password", "welcome");
Response response = RestAssured.given().config(RestAssured.config().redirect(redirectConfig().followRedirects(false)).encoderConfig(EncoderConfig.encoderConfig().encodeContentTypeAs("multipart/form-data", ContentType.TEXT)))
.queryParams(formParams)
.post("http://posturl");
You are sending the parameters as a query, not as form params.
Also, looks like you need to follow the redirect, since you're getting a 301, so you need followRedirects(true) instead of false.
You need to do it this way:
Response response = RestAssured.given()
.config(RestAssured.config()
.redirect(new RedirectConfig().followRedirects(true))
.encoderConfig(EncoderConfig
.encoderConfig()
.encodeContentTypeAs("multipart/form-data", ContentType.TEXT)))
.formParams(formParams)
.post("http://posturl");

Apache HTTPClient Headers are not correctly set

i'm trying to request a GET via HTTPS trough a Proxy. The Proxy answers with 400:Bad Request. I sniffed the data with wireshark and i have seen, that the headers are not set. Because of security, i replaced some Values with <> Brackets. Can anybody help?
This is a part of my implementation:
String urlString = ctx.getUrl();
HttpHost target;
CloseableHttpClient httpclient;
HttpClientContext localContext;
try
{
CredentialsProvider credsProvider = new BasicCredentialsProvider();
int proxyport = Integer.parseInt(ctx.getProxyPort());
credsProvider.setCredentials(
new AuthScope(<MyProxyUrl>, <MyProxyPort>),
new UsernamePasswordCredentials(<MyProxyUser>, <MyProxyPassword>));
httpclient = HttpClients.custom().setDefaultCredentialsProvider(credsProvider).build();
target = new HttpHost(urlString, 443, "https");
HttpHost proxy = new HttpHost(<MyProxyUser>, <MyProxyPassword>);
RequestConfig config = RequestConfig.custom().setProxy(proxy).build();
request = new HttpGet("/");
request.setURI(new URI(urlString));
//this method sets different header
HttpProperty.setHeaders(request, ctx);
request.setConfig(config);
HttpResponse response = httpclient.execute(target, request);
I have traced the headers in the request with and printed name/value with the output below:
Header[] headers = request.getAllHeaders();
Header Name:Proxy-Connection
Header Value:close
Header Name:Proxy-Authorization
Header Value:Basic
Header Name:User-Agent
Header Value: MyDevice
Header Name:Accept
Header Value:text/html
At least this is the response:
Content length responesCode: 0 400
From Wireshark sniffing i found, that the headers which are defintly inside the request are not set when sending CONNECT.
I attached this picture:
EDIT:
Thank you Damian Nikodem,
but i found the solution.
The first request is always sent without user headers.
I changed two things, and the proxy authorization works:
request = new HttpGet(urlString);
HttpResponse response = httpclient.execute(request);
I am assuming that you are attempting to communicate with a SCADA or production management system. From what I can see you are sending plain HTTP to your target server via the proxy, while trying to connect via HTTPS.
I couldn't see the response in your wireshark dump, but it most likely contains a error message that looks something like this:
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html>
<head>
<title>400 Bad Request</title>
</head>
<body>
<h1>Bad Request</h1>
<p>Your browser sent a request that this server could not understand.<br />
Reason: You're speaking plain HTTP to an SSL-enabled server port.<br />
Instead use the HTTPS scheme to access this URL, please.<br />
<blockquote>Hint: <b>https://???/</b></blockquote>
</p>
</body>
</html>
P.S. You should edit your image a little bit more because it shows a LOT of information about your employer/customer..
#Thorgas, I don't understand what you sad about "found the solution". Do you mean that you found out how to add extra headers in the CONNECT with HttpClinet? I'm also confusing about this.
But i found out that using HttpsUrlconnection in android doesn't have this kind of problem.
URLConnection urlConnection = url.openConnection(proxy);
HttpsURLConnection httpsUrlConnection = (HttpsURLConnection) urlConnection;
httpsUrlConnection.setRequestMethod("GET");
httpsUrlConnection.setRequestProperty("HEADER1","HEADER1Content");
httpsUrlConnection.connect();

OpenFire + Converse.js Anonymous Login is false, Authentication Fails

I have installed OpenFire and Apache in windows, and created two users us1 & us2 in OpenFire. I have disabled Anonymous Login in OpenFire. Users able to login from Pidgin(XMAPP Client). Now Im trying to login from Converse.js, getting wired response in UI.
Here is Converse initialization
require(['converse'], function (converse) {
converse.initialize({
allow_otr: true,
auto_list_rooms: false,
auto_subscribe: false,
bosh_service_url: 'http://localhost/httpbind/', // Please use this connection manager only for testing purposes
hide_muc_server: false,
i18n: locales['en'], // Refer to ./locale/locales.js to see which locales are supported
play_sounds: true,
prebind: false,
show_controlbox_by_default: true,
roster_groups: true
});
});
When I click login I see two requests going to server
<body rid='3144306786' xmlns='http://jabber.org/protocol/httpbind' to='us1' xml:lang='en' wait='60' hold='1' content='text/xml; charset=utf-8' ver='1.6' xmpp:version='1.0' xmlns:xmpp='urn:xmpp:xbosh'/>
and Response is
<body xmlns="http://jabber.org/protocol/httpbind" xmlns:stream="http://etherx.jabber.org/streams" from="pgi-satishb" authid="655df560" sid="655df560" secure="true" requests="2" inactivity="30" polling="5" wait="60" hold="1" ack="3144306786" maxpause="300" ver="1.6"><stream:features><mechanisms xmlns="urn:ietf:params:xml:ns:xmpp-sasl"><mechanism>DIGEST-MD5</mechanism><mechanism>PLAIN</mechanism><mechanism>CRAM-MD5</mechanism></mechanisms><compression xmlns="http://jabber.org/features/compress"><method>zlib</method></compression><bind xmlns="urn:ietf:params:xml:ns:xmpp-bind"/><session xmlns="urn:ietf:params:xml:ns:xmpp-session"/></stream:features></body>
And Next request is
<body rid='3144306787' xmlns='http://jabber.org/protocol/httpbind' sid='655df560' type='terminate'/>
Response
<body xmlns="http://jabber.org/protocol/httpbind" type="terminate"></body>
Now I'm in dark, don't know what to do.
Nothing Helped so downloaded latest code from https://github.com/jcbrand/converse.js/archive/master.zip
which solved the problem

What is wrong with this HttpWebRequest/HttpWebResponse code (why is it considered a "bad" request (400))? [closed]

Closed. This question needs details or clarity. It is not currently accepting answers.
Want to improve this question? Add details and clarify the problem by editing this post.
Closed 8 years ago.
Improve this question
Based on the info from this MS link, I've got the following code in a Windows CE / Compact Framework app which calls a REST method in a Web API server app:
public static string SendXMLFile2(string uri, string data)
{
//TODO: Remove below after testing
String s = data.Substring(0, 128);
MessageBox.Show(String.Format("data length is {0}, uri is {1}, first part is {2}", data.Length, uri, s));
//TODO: Remove above after testing
HttpWebRequest myHttpWebRequest=(HttpWebRequest)WebRequest.Create(uri);
myHttpWebRequest.AllowWriteStreamBuffering=false;
myHttpWebRequest.Method="POST";
UTF8Encoding encodedData = new UTF8Encoding();
//ASCIIEncoding encodedData=new ASCIIEncoding();
byte[] byteArray=encodedData.GetBytes(data);
//myHttpWebRequest.ContentType="application/x-www-form-urlencoded";
myHttpWebRequest.ContentType = "application/xml";
myHttpWebRequest.ContentLength=byteArray.Length;
Stream newStream=myHttpWebRequest.GetRequestStream();
newStream.Write(byteArray,0,byteArray.Length);
newStream.Close();
HttpWebResponse myHttpWebResponse=(HttpWebResponse)myHttpWebRequest.GetResponse();
return myHttpWebResponse.StatusDescription;
}
What I see is:
...and then I get, "The remote server returned an error: (400) Bad Request." The breakpoint in my REST method (on the server) is not even reached when this exception is thrown/returned.
Why? What do I have to change in the code to get the "bad" request to be considered "good"?
UPDATE
To answer mrchief, here's the server code:
[Route("api/inventory/sendXML/{userId}/{pwd}/{filename}")]
public async void SendInventoryXML(String userId, String pwd, String fileName)
{
XDocument doc = XDocument.Load(await Request.Content.ReadAsStreamAsync());
String saveLoc = String.Format(#"C:\HDP\{0}.xml", fileName);
doc.Save(saveLoc);
}
Yes, I'm ignoring userId and pwd for now.
UPDATE 2
Plugging this:
http://192.168.125.50:21608/api/inventory/sendXML/duckbilled/platypus/INV_bla.xml
...into Postman, I get:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN""http://www.w3.org/TR/html4/strict.dtd">
<HTML>
<HEAD>
<TITLE>Bad Request</TITLE>
<META HTTP-EQUIV="Content-Type" Content="text/html; charset=us-ascii">
</HEAD>
<BODY>
<h2>Bad Request - Invalid Hostname</h2>
<hr>
<p>HTTP Error 400. The request hostname is invalid.</p>
</BODY>
</HTML>
??? This same uri works fine when I call it from a Winforms app created in Visual Studio 2013. Well, actually, I use localhost instead there. I get the same response as above if I use the host name instead of the IP Address. But if I use localhost from PostMan:
http://localhost:21608/api/inventory/sendXML/duckbilled/platypus/INV_bla.xml
I get:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html
xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>IIS 8.0 Detailed Error - 404.0 - Not Found</title>
<style type="text/css">
<!--
body{margin:0;font-size:.7em;font-family:Verdana,Arial,Helvetica,sans-serif;}
code{margin:0;color:#006600;font-size:1.1em;font-weight:bold;}
.config_source code{font-size:.8em;color:#000000;}
pre{margin:0;font-size:1.4em;word-wrap:break-word;}
ul,ol{margin:10px 0 10px 5px;}
ul.first,ol.first{margin-top:5px;}
fieldset{padding:0 15px 10px 15px;word-break:break-all;}
.summary-container fieldset{padding-bottom:5px;margin-top:4px;}
legend.no-expand-all{padding:2px 15px 4px 10px;margin:0 0 0 -12px;}
legend{color:#333333;;margin:4px 0 8px -12px;_margin-top:0px;
font-weight:bold;font-size:1em;}
a:link,a:visited{color:#007EFF;font-weight:bold;}
a:hover{text-decoration:none;}
h1{font-size:2.4em;margin:0;color:#FFF;}
h2{font-size:1.7em;margin:0;color:#CC0000;}
h3{font-size:1.4em;margin:10px 0 0 0;color:#CC0000;}
h4{font-size:1.2em;margin:10px 0 5px 0;
}#header{width:96%;margin:0 0 0 0;padding:6px 2% 6px 2%;font-family:"trebuchet MS",Verdana,sans-serif;
color:#FFF;background-color:#5C87B2;
}#content{margin:0 0 0 2%;position:relative;}
.summary-container,.content-container{background:#FFF;width:96%;margin-top:8px;padding:10px;position:relative;}
.content-container p{margin:0 0 10px 0;
}#details-left{width:35%;float:left;margin-right:2%;
}#details-right{width:63%;float:left;overflow:hidden;
}#server_version{width:96%;_height:1px;min-height:1px;margin:0 0 5px 0;padding:11px 2% 8px 2%;color:#FFFFFF;
background-color:#5A7FA5;border-bottom:1px solid #C1CFDD;border-top:1px solid #4A6C8E;font-weight:normal;
font-size:1em;color:#FFF;text-align:right;
}#server_version p{margin:5px 0;}
table{margin:4px 0 4px 0;width:100%;border:none;}
td,th{vertical-align:top;padding:3px 0;text-align:left;font-weight:normal;border:none;}
th{width:30%;text-align:right;padding-right:2%;font-weight:bold;}
thead th{background-color:#ebebeb;width:25%;
}#details-right th{width:20%;}
table tr.alt td,table tr.alt th{}
.highlight-code{color:#CC0000;font-weight:bold;font-style:italic;}
.clear{clear:both;}
.preferred{padding:0 5px 2px 5px;font-weight:normal;background:#006633;color:#FFF;font-size:.8em;}
-->
</style>
</head>
<body>
<div id="content">
<div class="content-container">
<h3>HTTP Error 404.0 - Not Found</h3>
<h4>The resource you are looking for has been removed, had its name changed, or is temporarily unavailable.</h4>
...??? Is it just because this is a POST that is supposed to have an XML file attached, and because it's not there, it gets consumed with confusion?
UPDATE 3
I see the "." in "INV_bla.xml" was confusing PostMan. If I remove it, so that the URI is "http://localhost:21609/api/inventory/sendXML/duckbilled/platypus/INV_bla", I get instead a 500 err msg and:
<!DOCTYPE html>
<html>
<head>
<title>Root element is missing.</title>
<meta name="viewport" content="width=device-width" />
<style>
body {font-family:"Verdana";font-weight:normal;font-size: .7em;color:black;}
p {font-family:"Verdana";font-weight:normal;color:black;margin-top: -5px}
b {font-family:"Verdana";font-weight:bold;color:black;margin-top: -5px}
H1 { font-family:"Verdana";font-weight:normal;font-size:18pt;color:red }
H2 { font-family:"Verdana";font-weight:normal;font-size:14pt;color:maroon }
pre {font-family:"Consolas","Lucida Console",Monospace;font-size:11pt;margin:0;padding:0.5em;line-height:14pt}
.marker {font-weight: bold; color: black;text-decoration: none;}
.version {color: gray;}
.error {margin-bottom: 10px;}
.expandable { text-decoration:underline; font-weight:bold; color:navy; cursor:hand; }
#media screen and (max-width: 639px) {
pre { width: 440px; overflow: auto; white-space: pre-wrap; word-wrap: break-word; }
}
#media screen and (max-width: 479px) {
pre { width: 280px; }
}
</style>
</head>
<body bgcolor="white">
<span>
<H1>Server Error in '/' Application.
<hr width=100% size=1 color=silver>
</H1>
<h2>
<i>Root element is missing.</i>
</h2>
</span>
<font face="Arial, Helvetica, Geneva, SunSans-Regular, sans-serif ">
<b> Description: </b>An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
<br>
<br>
<b> Exception Details: </b>System.Xml.XmlException: Root element is missing.
<br>
<br>
<b>Source Error:</b>
<br>
<br>
<table width=100% bgcolor="#ffffcc">
<tr>
<td>
<code>
<pre>
Line 29: public async void SendInventoryXML(String userId, String pwd, String fileName)
Line 30: {
<font color=red>Line 31: XDocument doc = XDocument.Load(await Request.Content.ReadAsStreamAsync());
</font>Line 32: String saveLoc = String.Format(#"C:\HDP\{0}.xml", fileName);
Line 33: doc.Save(saveLoc);
</pre>
</code>
</td>
</tr>
</table>
<br>
<b> Source File: </b> c:\Project\git\CStore\HHS.Web\Controllers\InventoryXMLController.cs
<b> Line: </b> 31
<br>
<br>
<b>Stack Trace:</b>
<br>
<br>
<table width=100% bgcolor="#ffffcc">
<tr>
<td>
<code>
<pre>
[XmlException: Root element is missing.]
System.Xml.XmlTextReaderImpl.Throw(Exception e) +69
System.Xml.XmlTextReaderImpl.ParseDocumentContent() +305
System.Xml.XmlTextReaderImpl.Read() +213
System.Xml.Linq.XDocument.Load(XmlReader reader, LoadOptions options) +44
System.Xml.Linq.XDocument.Load(Stream stream, LoadOptions options) +57
System.Xml.Linq.XDocument.Load(Stream stream) +6
HHS.Web.Controllers.<SendInventoryXML>d__0.MoveNext() in c:\Project\git\CStore\HHS.Web\Controllers\InventoryXMLController.cs:31
System.Runtime.CompilerServices.AsyncMethodBuilderCore.<ThrowAsync>b__0(Object state) +50
System.Web.<>c__DisplayClass7.<Post>b__6() +15
System.Web.Util.SynchronizationHelper.SafeWrapCallback(Action action) +91
</pre>
</code>
</td>
</tr>
</table>
<br>
<hr width=100% size=1 color=silver>
<b>Version Information:</b> Microsoft .NET Framework Version:4.0.30319; ASP.NET Version:4.0.30319.18446
</font>
</body>
</html>
<!--
[XmlException]: Root element is missing.
at System.Xml.XmlTextReaderImpl.Throw(Exception e)
at System.Xml.XmlTextReaderImpl.ParseDocumentContent()
at System.Xml.XmlTextReaderImpl.Read()
at System.Xml.Linq.XDocument.Load(XmlReader reader, LoadOptions options)
at System.Xml.Linq.XDocument.Load(Stream stream, LoadOptions options)
at System.Xml.Linq.XDocument.Load(Stream stream)
at HHS.Web.Controllers.InventoryXMLController.<SendInventoryXML>d__0.MoveNext() in c:\Project\git\CStore\HHS.Web\Controllers\InventoryXMLController.cs:line 31
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.AsyncMethodBuilderCore.<ThrowAsync>b__0(Object state)
at System.Web.AspNetSynchronizationContext.<>c__DisplayClass7.<Post>b__6()
at System.Web.Util.SynchronizationHelper.SafeWrapCallback(Action action)
-->
UPDATE 4
With this code (following Brinn's suggestion):
String datta = "<Content></Content>";
String s = SendXMLFile2(uri, datta);
MessageBox.Show(s); // TODO: Remove or comment out after testing
...I still get a 400 error.
UPDATE 5
There is ONE permutation that actually works in Postman to the extent that I reach the breakpoint in the server code (http://localhost:21608/api/inventory/sendXML/duckbill/platypus/INV_bla). However, when I hit F10 to step from the "XDocument doc = ..." line to the "String saveLoc = ..." line, the "Root element is missing" exception is thrown (the one shown above in all its gory glory).
I cannot use that exact same URI in my app, though, as "localhost" is URI-non-grata there.
UPDATE 6
Grasping at straws, I even tried this:
String xmlHeader = "<?xml version=\"1.0\" encoding=\"utf-8\"?>";
String crlf = "\r\n";
String datta = "<Content></Content>";
data = xmlHeader + crlf + datta + crlf;
String s = SendXMLFile2(uri, data);
...but the "400 Bad Request" err remains, causing me to rue the day I decided to hang up my spurs.
UPDATE 7
Even when I add an XML file in Postman, I get an error (500 - Internal Server Error):
UPDATE 8
Even with the code straight from the Wigley's mouth (from p. 358 of "Microsoft .NET Compact Framework"):
public static string SendXMLFile2(string uri, string data)
{
WebRequest req = WebRequest.Create(uri);
req.Method = "Post";
req.ContentType = "text/plain; charset=utf-8";
// Encode the data
byte[] encodedBytes = Encoding.UTF8.GetBytes(data);
req.ContentLength = encodedBytes.Length;
// Write encoded data into request stream
Stream requestStream = req.GetRequestStream();
requestStream.Write(encodedBytes, 0, encodedBytes.Length);
requestStream.Close();
WebResponse result = req.GetResponse();
return result.ToString();
}
...I get the "400 - Bad Request" err.
Is it possibly the data - the contents of the XML file - that is throwing a spanner/monkey wrench into the works?
Here's what that looks like (excerpt, with the great middle section elided):
<?xml version="1.0" encoding="utf-8"?>
<Command>
<INV>
<line_id>1</line_id>
<ref_no>valerie</ref_no>
<upc_code>79997000331</upc_code>
<description>ffff</description>
<department>2</department>
<vendor_id>1</vendor_id>
<upc_pack_size>1</upc_pack_size>
<id>79997000331</id>
<pack_size>1</pack_size>
<unit_cost>0</unit_cost>
<unit_list>0</unit_list>
<unit_qty>9</unit_qty>
<new_item>-1</new_item>
</INV>
<INV>
<line_id>2</line_id>
<ref_no>valerie</ref_no>
<upc_code>81127600412</upc_code>
<description>SLV EAG FF 100 BX</description>
<department>2.01</department>
<vendor_id>1</vendor_id>
<upc_pack_size>1</upc_pack_size>
<id>81127600412</id>
<pack_size>1</pack_size>
<unit_cost>0</unit_cost>
<unit_list>0</unit_list>
<unit_qty>9</unit_qty>
<new_item>0</new_item>
</INV>
. . .
<INV>
<line_id>3277</line_id>
<ref_no>valerie</ref_no>
<upc_code>00980000007</upc_code>
<description>TICTAC</description>
<department>8.8</department>
<vendor_id />
<upc_pack_size>1</upc_pack_size>
<id>00980000007</id>
<pack_size>1</pack_size>
<unit_cost>2</unit_cost>
<unit_list>3.55</unit_list>
<unit_qty>0</unit_qty>
<new_item>0</new_item>
</INV>
</Command>
UPDATE 9
I get "The remote server returned an error: (400) Bad Request" in my app. Now I do see two interesting entries in Fiddler: There are two 404s that display in Fiddler which
have "Host" vals of "localhost:21609" and "localhost:21608" (which relate to the REST calls in question), and "URL" values of /favicon.ico ... ???
What in red blazes is that about? They have a "Body" value of 4,905, a "Caching" value of "private" and "Content-Type" of text/html; charset=utf8
Why is favicon.ico problematic or even considered here?
UPDATE 10
This is Fiddler's "Log" tab contents for my "faked" call to the REST method (using Composer to add my POST URI and upload an XML file):
09:14:20:9657 [WebSocket #1439] Read from Server failed... Object reference not set to an instance of an object.
09:23:19:7275 /Fiddler.CertMaker> Invoking makecert.exe with arguments: -pe -ss my -n "CN=www.google-analytics.com, O=DO_NOT_TRUST, OU=Created by http://www.fiddler2.com" -sky exchange -in DO_NOT_TRUST_FiddlerRoot -is my -eku 1.3.6.1.5.5.7.3.1 -cy end -a sha1 -m 132 -b 09/03/2013
09:23:20:1296 /Fiddler.CertMaker>64-CreateCert(www.google-analytics.com) => (0).
09:25:45:6411 [Fiddler] No HTTP request was received from (chrome:1384) new client socket, port 4235.
09:25:55:6411 [Fiddler] No HTTP request was received from (chrome:1384) new client socket, port 4241.
09:36:35:6681 [WebSocket #1473] Read from Client returned error: 0
09:36:35:7491 [WebSocket #1473] Read from Server returned error: 0
09:37:45:4031 [WebSocket #1552] Read from Client returned error: 0
09:37:45:4861 [WebSocket #1552] Read from Server returned error: 0
09:37:51:8077 [WebSocket #1575] Read from Client returned error: 0
09:37:51:8877 [WebSocket #1575] Read from Server returned error: 0
I would think maybe the "Object reference not set to an instance of an object" is indicating something in my server code might be the problem - but the key part of that is not even reached...is the fact that I'm calling async/await code in the server a possible cause of my woes???
UPDATE 11
With the only change being that "21609" becomes "21608" in my URL, Fiddler now gives me a "500" ("Internal Server Error") Result (when using 21609 I got "204" Result, but it didn't work).
With this port number, the real "meat and potatoes" code is reached on the server (the async/await code that calls XDocument.Load(), etc.
Fiddler's Inspectors.WebView tab shows me:
Is the problem that this xml does not start off with this line:
<?xml version="1.0" encoding="utf-8"?>
...and is thus not seen as valid/real XML?
UPDATE 12
Nope - even with a file that contains that xml starting line, it fails in the same way...
UPDATE 13
So depending on the client used, I get different results:
From the handheld device, I get a "/favicon.ico" err in Fiddler.
From Fiddler itself (using the "Composer" tab) I get, "Data at the root level is invalid. Line 1, position 1"
From a test Winforms app, the code works (the expected file is populated and saved where it should be) but there is no trace in Fiddler that an HTTP call was even made (there is no entry/evidence for it)...???
UPDATE 14
The server app does have this in Global.asax.cs:
RouteTable.Routes.IgnoreRoute("{*favicon}", new { favicon = #"(.*/)?favicon.ico(/.*)?" });
...so...what's the problem?
UPDATE 15
I notice that I can get trace log files generated by my server app from this location: C:\Users\\Documents\IISExpress\TraceLogFiles\
Looking there, I find the proverbial boatload of information (overload?), such as:
<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type='text/xsl' href='freb.xsl'?>
<!-- saved from url=(0014)about:internet -->
<failedRequest url="http://localhost:21609/"
siteId="40"
appPoolId="Clr4IntegratedAppPool"
processId="10580"
verb="GET"
remoteUserName=""
userName=""
tokenUserName="SSCS\clay"
authenticationType="anonymous"
activityId="{00000000-0000-0000-1D00-0080020000ED}"
failureReason="STATUS_CODE"
statusCode="200"
triggerStatusCode="403.14"
timeTaken="62"
xmlns:freb="http://schemas.microsoft.com/win/2006/06/iis/freb"
>
. . .
What strikes me is the verb "GET" - this is a "POST" not a "GET" - or am I misunderstanding the meaning of the "verb" member?
UPDATE 16
I tested three different ways of calling the REST method, examining what was happening as best as I could using Fiddler and the trace log files that the server creates.
The only successful calling and execution of the server code (receiving the file, and then saving it to disk) occurred with the Winforms (Visual Studio 2013, .NET 4) app.
Here are some details gleaned from those three attempts:
[a] EXE on handheld device:
400 - Bad Request
breakpoint in server Controller code NOT reached
No activity seen in Fiddler
Summary: Fails - server is reached, but returns err msg
Pertinent contents of Log Trace file:
[ no log trace file created ]
[b] Test Winforms app:
breakpoint in server Controller code IS reached
No activity seen in Fiddler (?!?)
Method works - file is created by server code with the data it should have
Summary: works, but is "invisible" to Fiddler
Pertinent contents of Log Trace file:
<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type='text/xsl' href='freb.xsl'?>
<!-- saved from url=(0014)about:internet -->
<failedRequest url="http://localhost:21608/api/inventory/sendXML/duckbill/Platypus/DSD_42314_3_20140310140842828" siteId="41" appPoolId="Clr4IntegratedAppPool" processId="8916"
verb="POST"
remoteUserName=""
userName=""
tokenUserName="NRBQ\clay"
authenticationType="anonymous"
activityId="{00000000-0000-0000-5D00-0080000000F6}"
failureReason="STATUS_CODE"
statusCode="204"
triggerStatusCode="204"
timeTaken="3666"
xmlns:freb="http://schemas.microsoft.com/win/2006/06/iis/freb"
>
[c] Fiddler "Composer"
breakpoint in server Controller code IS reached
Activity IS seen in Fiddler
Result = 500 ("Internal Server Error")
Summary: Gets further than the handheld, but fails
Pertinent contents of Log Trace file:
<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type='text/xsl' href='freb.xsl'?>
<!-- saved from url=(0014)about:internet -->
<failedRequest url="http://localhost:21608/api/inventory/sendXML/duckbill/platypus/INV_bla"
siteId="41"
appPoolId="Clr4IntegratedAppPool"
processId="8916"
verb="POST"
remoteUserName=""
userName=""
tokenUserName="NRBQ\clay"
authenticationType="anonymous"
activityId="{00000000-0000-0000-4800-0080060000F6}"
failureReason="STATUS_CODE"
statusCode="500"
triggerStatusCode="204"
timeTaken="2964"
xmlns:freb="http://schemas.microsoft.com/win/2006/06/iis/freb"
>
UPDATE 17
Could it be that my encoding is wrong? It seems that might be the case, based on what I read here when researching the err msg I get ("Data at the root level is invalid. Line 1, position 1.")
This is what I'm doing in the client:
WebRequest req = WebRequest.Create(uri);
req.Method = "Post";
req.ContentType = "text/plain; charset=utf-8";
byte[] encodedBytes = Encoding.UTF8.GetBytes(data);
Should ContentType be "application/xml" or "application/x-www-form-urlencoded" (or something else) instead?
and/or should Encoding be something other than UTF8?
UPDATE 18
I noticed in C:\Users\clay\Documents\IISExpress\TraceLogFiles\ that I was getting a "403.14":
<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type='text/xsl' href='freb.xsl'?>
<!-- saved from url=(0014)about:internet -->
<failedRequest url="http://localhost:21609/"
siteId="40"
appPoolId="Clr4IntegratedAppPool"
processId="1572"
verb="GET"
remoteUserName=""
userName=""
tokenUserName="SSCS\clay"
authenticationType="anonymous"
activityId="{00000000-0000-0000-0200-0080060000EB}"
failureReason="STATUS_CODE"
statusCode="200"
triggerStatusCode="403.14"
timeTaken="904"
xmlns:freb="http://schemas.microsoft.com/win/2006/06/iis/freb"
>
Which, according to this and more specifically this indicates "Directory listing denied."
Thinking this may be the crux of the problem, I researched what to do about a 403.14, and I followed Method 1 here, which is entitled "Add a default document (Recommended)" but actually contains the steps to "Enable the Directory Browsing feature in IIS"
But I still get the same triggerStatusCode ("403.14") in C:\Users\clay\Documents\IISExpress\TraceLogFiles\
So I was going to try the other method, too, but I already had a default document, so enable was not an option there (disable was).
Finally, I went with the final option, of updating the IIS Express config:
While that made the web pages look better when running the server (the 403.14 was replaced with a "localhost - /" dir listing), it made no difference when the client app attempted to send the XML file to the server. So, this last changed "fixed" the pages that display in the browser when the server is started, but I'm still seeing the "403.14" problem in the Trace log files when I try to access the server from my client app...???
UPDATE 19
With the latest change (setting the IIS config), the Trace log no longer has the "403.14":
<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type='text/xsl' href='freb.xsl'?>
<failedRequest url="http://localhost:21609/"
. . .
verb="GET"
. . .
failureReason="STATUS_CODE"
statusCode="200"
triggerStatusCode="200"
timeTaken="78"
xmlns:freb="http://schemas.microsoft.com/win/2006/06/iis/freb"
>
...so I guess the "400 - Bad Request" error I get from the server when calling it from the client is unrelated to this erstwhile 403.14 error. Note, too, that it the "failedRequest" is some "GET" operation (whereas my failing call from the client is an HttpPost). What is failing here I don't know, as statusCode 200 is, in fact, "OK"
The first time (only) that I start the server (or start and then call the server from the client), I get a 404 for a missing favicon, but that doesn't seem to really be a problem.
UPDATE 20
The solution was to add at a command prompt either this:
netsh http add urlacl url=http://shannon2:80/ user=everyone
...or the same for port 8080 instead of 80.
See Update 5 here.
It could, frankly, be a number of things. If the service is hosted on IIS, and you have IE, then, being a REST service, navigate to that URI, and you should get a 400.xx error. The xx part is clarified here

How to send post webrequest from javascript used in html loaded a in webview - titanium mobile?

I need to send post web request from titanium mobile webview.
Created a webview and included the below html code (Upload.html)
<html>
<head>
<script>
function loadXMLDoc()
{
//alert('asdfsf');
var xmlhttp=new XMLHttpRequest();
xmlhttp.open("POST","https://www.mydomain.com",true);
xmlhttp.send('encrypted image string');
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
alert('xmlhttp'+xmlhttp.responseText);
  }
}
}
</script>
</head>
<body onload="loadXMLDoc()">
<h1>Sample</h1>
</body></html>
and used in webview as follows:
var webview = Ti.UI.createWebView({
url : 'Upload.html',
height : 100,
width : 100,
top : 0,
left : 0
});
On creating the webview console shows
2013-02-07 17:36:20.906 WebviewSample[6575:1f43f] [WARN] Unable to securely connect to api.appcelerator.net with the latest TLS. Trying again with TLS1.0. It is highly suggested that the server be updated to the latest TLS support.
[ERROR] Analytics error sending request: A connection failure occurred: SSL problem (Possible causes may include a bad/expired/self-signed certificate, clock set to wrong date)
Although the console error may seem to be related to your webview I think it's not.
I think you have analytics enabled for your application and for some reason the SSL session is being rejected (time not correctly configured, etc.).
Disable analytics in your tiapp.xml and this error should not appear again, or try to figure out what is making the SSL connection to be rejected.
Second thought: If you're trying to post to an https domain and you're already having issues with your time config. it probably won't post anything through the webview because the SSL connection is also being rejected for the same reason as the analytics connection.