URI parse exception

P

pedrito

I get exception trying to parse this URI:

http://-eeayr4mwvtw998.usercash.com/

But IE and Firefox have no problem opening it.

The parse exception is actually happening inside an HTTPWebRequest so I
guess there's no much I can do about it one wary or the other, unless
there's some way to encode it so that it still goes where it's supposed to
go but is actually parseable by the URI parser as well.

Any ideas?

Thanks.
 
P

pedrito

Peter Bromberg said:
Can you post some short but complete code sample to allow somebody to
reproduce the issue?
-- Peter
Recursion: see Recursion
site: http://www.eggheadcafe.com
unBlog: http://petesbloggerama.blogspot.com
BlogMetaFinder: http://www.blogmetafinder.com

Sorry, you asked for short but complete. Here's complete (though I think
the previous post is plenty to demonstrate how easy it is to produce).

using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.Net;
using System.Text;

namespace UserCashTest
{
/// <summary>
/// Summary description for Form1.
/// </summary>
public class Form1 : System.Windows.Forms.Form
{
private System.Windows.Forms.Button button1;
private System.Windows.Forms.TextBox textBox1;
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.Container components = null;

public Form1()
{
//
// Required for Windows Form Designer support
//
InitializeComponent();

//
// TODO: Add any constructor code after InitializeComponent call
//
}

/// <summary>
/// Clean up any resources being used.
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}

#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.button1 = new System.Windows.Forms.Button();
this.textBox1 = new System.Windows.Forms.TextBox();
this.SuspendLayout();
//
// button1
//
this.button1.Location = new System.Drawing.Point(88, 16);
this.button1.Name = "button1";
this.button1.TabIndex = 0;
this.button1.Text = "button1";
this.button1.Click += new
System.EventHandler(this.button1_Click);
//
// textBox1
//
this.textBox1.Anchor =
((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top
| System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.textBox1.Location = new System.Drawing.Point(8, 64);
this.textBox1.Multiline = true;
this.textBox1.Name = "textBox1";
this.textBox1.Size = new System.Drawing.Size(280, 200);
this.textBox1.TabIndex = 1;
this.textBox1.Text = "";
//
// Form1
//
this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
this.ClientSize = new System.Drawing.Size(292, 273);
this.Controls.Add(this.textBox1);
this.Controls.Add(this.button1);
this.Name = "Form1";
this.Text = "Form1";
this.ResumeLayout(false);

}
#endregion

/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.Run(new Form1());
}

private void button1_Click(object sender, System.EventArgs e)
{
HttpWebRequest req =
HttpWebRequest.Create(@"http://-eeayr4mwvtw998.usercash.com/") as
HttpWebRequest;
HttpWebResponse resp = req.GetResponse() as HttpWebResponse;
string len = resp.Headers["Content-Length"];
int dataLen = Convert.ToInt32(len);
byte[] data = new byte[dataLen];
resp.GetResponseStream().Read(data, 0, dataLen);
resp.Close();

string dataStr = ASCIIEncoding.ASCII.GetString(data);
textBox1.Text = dataStr;

}
}
}
 
P

Peter Duniho

pedrito said:
Sure, this will throw the exception:

HttpWebRequest req =
HttpWebRequest.Create(@"http://-eeayr4mwvtw998.usercash.com/") as
HttpWebRequest;

I ought to mention, I'm using .NET 1.1. Maybe it was something fixed in a
later version...

Looks like. I pasted the above line into an empty console application
(which is, by the way, the true "minimally complete" example of code
that might reproduce the issue :) ), and it executed fine without an
exception.

..NET 2.0 here.

Pete
 
P

pedrito

Peter Duniho said:
Looks like. I pasted the above line into an empty console application
(which is, by the way, the true "minimally complete" example of code that
might reproduce the issue :) ), and it executed fine without an exception.

.NET 2.0 here.

Pete

Yeah, I had a feeling it'd probably work in 2.0... I'm wondering if I can
encode it somehow that the uri parser wouldn't choke... Oh well, it's not
horribly important. I'll play with it a bit and see what I can do...

Yeah, I thought of doing a console app, but I already had the Win app handy
(because I was using it to look at the HTML coming back from a url), so
easier to copy and paste that than create yet another test app.
 
P

Peter Duniho

pedrito said:
Yeah, I had a feeling it'd probably work in 2.0... I'm wondering if I can
encode it somehow that the uri parser wouldn't choke... Oh well, it's not
horribly important. I'll play with it a bit and see what I can do...

Well, obviously it'd be better if you could switch to a newer version of
..NET. But barring that, you could just pre-process your string and
replace characters that might be problematic with a different
representation.

I don't know how often you're going to run into this, but in the
specific example, just replacing the '-' character with %2D might
convince the parser to let it through.

Pete
 
P

pedrito

Peter Duniho said:
Well, obviously it'd be better if you could switch to a newer version of
.NET. But barring that, you could just pre-process your string and
replace characters that might be problematic with a different
representation.

I don't know how often you're going to run into this, but in the specific
example, just replacing the '-' character with %2D might convince the
parser to let it through.

Pete

Pete, thanks. Tried that (replacing it with the %2D encoding) yesterday and
it didn't work... Same error.

I may bite the bullet and upgrade. I have 2005 Express. It's just that I
have to use 2003 for work and it's what I know and I'm comfortable with. The
app that does this isn't huge, but it's not small and I just don't know what
all is going to be involved in upgrading it. I won't have much time to work
on it during the week (it's a side-project), but maybe next weekend I'll try
porting it over and see how much work it's going to be.

Thanks.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top