1

I'm using these lines to fetch the data from my Company's server

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Credentials = new NetworkCredential(usr, pass);
ServicePointManager.ServerCertificateValidationCallback = ((sender, certificate, chain, sslPolicyErrors) => true);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();      

It works good but the problem is when I send large URLs like this:

https://172.16.100.1:5002/arx/eventexport?num_events=-1&start_date=1335079800000&end_date=1335382199000&filter=<filter><name><mask>controller.door.closed</mask><mask>controller.notification.digitalOutputChanged</mask><mask>controller.dac.eventBufferOverflow</mask><mask>controller.door.forcedOpen</mask><mask>controller.door.notClosed</mask><mask>controller.door.opened</mask><mask>controller.dac.powerOn</mask><mask>controller.door.pulseOpen</mask><mask>controller.door.pulseOpenRequest</mask><mask>controller.door.requestToExit</mask><mask>controller.reader.duress.alarm</mask><mask>controller.access.card.valid.standard</mask><mask>controller.access.card.invalid.inhibited</mask><mask>controller.access.card.invalid.pin</mask><mask>controller.access.card.invalid.pinMode</mask><mask>controller.access.card.invalid.door</mask><mask>controller.reader.invalid.format</mask><mask>controller.access.card.invalid.operatorControl</mask><mask>controller.access.card.invalid.pinAttempts</mask><mask>controller.access.card.invalid.pinTimeout</mask><mask>controller.access.card.invalid.zone.antipassback</mask><mask>controller.access.card.invalid.time.antipassback</mask><mask>controller.access.card.valid.pin</mask><mask>controller.reader.communicationFailure.active</mask><mask>controller.reader.communicationFailure.restored</mask><mask>controller.intrusionarea.blockingInput.closed</mask><mask>controller.intrusionarea.blockingInput.open</mask><mask>controller.notification.digitalInput1Closed</mask><mask>controller.notification.digitalInput1Opened</mask><mask>controller.dac.input2closed</mask><mask>controller.dac.input2opened</mask><mask>controller.dac.input4closed</mask><mask>controller.dac.input4opened</mask><mask>controller.dac.inputChanged</mask><mask>controller.door.mode.buzzerEnabled</mask><mask>controller.door.mode.conference</mask><mask>controller.door.mode.rteMaintainedUnlock</mask><mask>controller.door.mode.motorlockLowSecurity</mask><mask>controller.door.mode.unlocked</mask><mask>controller.door.mode.access.accessInhibited</mask><mask>controller.door.mode.access.buyAlarmtime</mask><mask>controller.door.mode.access.pinOnlyAllowed</mask><mask>controller.door.mode.access.dualCardsRequired</mask><mask>controller.door.mode.access.pinCardNumber</mask><mask>controller.door.mode.access.modePinRequired</mask><mask>controller.door.mode.access.modeSiteCodeOnly</mask><mask>controller.door.mode.access.apEnabled</mask><mask>controller.door.mode.exit.accessInhibited</mask><mask>controller.door.mode.exit.apEnabled</mask><mask>controller.door.mode.exit.buyAlarmtime</mask><mask>controller.door.mode.exit.dualCardsRequired</mask><mask>controller.door.mode.exit.pinCardNumber</mask><mask>controller.door.mode.exit.pinOnlyAllowed</mask><mask>controller.door.mode.exit.modePinRequired</mask><mask>controller.door.mode.exit.modeSiteCodeOnly</mask><mask>controller.door.motorlock.dayLocked</mask><mask>controller.door.motorlock.initJumperInstalled</mask><mask>controller.door.motorlock.locked</mask><mask>controller.door.motorlock.nightLocked</mask><mask>controller.door.motorlock.tubTurned</mask><mask>controller.door.motorlock.unlocked</mask><mask>controller.door.motorlock.error.encryptionFault</mask><mask>controller.door.motorlock.error.failedToLock</mask><mask>controller.door.motorlock.error.failedToUnlock</mask><mask>controller.door.motorlock.error.problemAtLock</mask><mask>controller.door.motorlock.error.problemAtPermanentUnlock</mask><mask>controller.door.motorlock.error.problemAtUnlock</mask><mask>controller.door.motorlock.error.seriousProblemAtLock</mask><mask>controller.notification.powerFault.active</mask><mask>controller.notification.powerFault.restored</mask><mask>controller.reader.tamper.active</mask><mask>controller.notification.tamper.restored</mask></name></filter>     

I got this exception

{"The remote server returned an error: (414) Request URI Too Large."}

at this line:

HttpWebResponse response = (HttpWebResponse)request.GetResponse();

So how can I send a large URI with HttpWebRequest?

Thanks in advance

beryllium
  • 29,669
  • 15
  • 106
  • 125
Ehsan
  • 4,334
  • 7
  • 39
  • 59
  • 5
    Your URL is 3800 characters long. See http://stackoverflow.com/questions/417142/what-is-the-maximum-length-of-a-url as to why this isn't working. You should, in actual fact, consider POSTing that data instead - http://stackoverflow.com/questions/2550965/post-data-through-httpwebrequest although that may require a change to your target web page, it's pretty much the only way you'll get this to work reliably. – dash Jun 05 '12 at 09:17

1 Answers1

0

414 error code is due to too long URI, as you have mentioned, length of the supported URI can be set at the web server if you / your company owns that server than you can change this setting to meet your needs, for more information go here,

But I guess you should change your approach here because 80% of your URI is filter parameter you should find some other way to shorten that parameter, for that you can use JSON which is shorter than XML & can be used for data communication

yogi
  • 19,175
  • 13
  • 62
  • 92