|
9231
|
Foros Generales / Dudas Generales / Una URL me devuelve StatusCode 200 cuando en realidad es 404, ¿Porque y como?.
|
en: 25 Mayo 2013, 17:23 pm
|
Hola A ver si los entendidos en http me pueden ayudar a salir de dudas. Fíjense en esta url: http://www.mp3crank.com/releases/12549/page/1Fíjense especiálmente en el número 12549, el cual me lo he inventado, pero lo comento porque para testear lo siguiente que voy a explicar hay que cambiar dicho número de la url por cualquier otro número (o bueno, cualquier otra parte de la url para que tire un error 404, pero eso me ha parecido la más fácil de sugerir como referencia). Bien, el problema es que esa url devuelve un código 404 la primera vez que intento acceder a ella (obtener la respuesta desde un lenguaje de programación), si intento obtener la respuesta una segunda vez, lo que me devolverá es un código 200 (success) SIEMPRE. Esto es incomprensible para mi porque no sé lo suficiente a nivel web, y a la única conclusión a la que he llegado ha sido esta: ...Esto no tengo ni idea de porque sucede, imagino que el servidor detecta que se ha intentado acceder a una página que no existe, y entonces por algún extraño motivo se crea automáticamente esa página de forma temporal para devolver el código "200" las siguientes veces?, hasta ahí llega mi imaginación, no lo sé. ¿Alguien me puede explicar de forma sencilla porque un servidor primero envía error 404 y luego en todos los demás intentos devuelve un 200?, ¿Esto es algo normal? Y lo más importante, aunque no supieran de programación, ¿Se os ocurre como puedo verificar si la página reálmente existe mediante un lenguaje de programación aunque la url me lanze un "200?, ...por ejemplo: " si Elektro, busca X cosa en los headers para verificarlo", o cosas así, cualquier información me sirve, pero no sé por donde empezar... porque la respuesta que me va a dar es un maldito "200", así que... Gracias por leer.
|
|
|
9232
|
Programación / .NET (C#, VB.NET, ASP) / Re: ¿ Como detectar error 404 ?
|
en: 25 Mayo 2013, 16:30 pm
|
Vaya que casualidad que justo cuando escribo el post encuentro la solución al primer problema... odio que me pase eso xD. Una función que hace el try:ctach por mi, si este es el único modo de hacer las cosas... pues lo veo aceptable: Public Class Form1 Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load Dim request As System.Net.HttpWebRequest = System.Net.HttpWebRequest.Create("http://www.mp3crank.com/releases/12548/page/1") Dim response As System.Net.HttpWebResponse = GetHttpResponse(request) If response.StatusCode = System.Net.HttpStatusCode.NotFound Then MsgBox("Error 404") End If End Sub Public Shared Function GetHttpResponse(request As System.Net.HttpWebRequest) As System.Net.HttpWebResponse Try Return DirectCast(request.GetResponse(), System.Net.HttpWebResponse) Catch ex As System.Net.WebException If ex.Response Is Nothing OrElse ex.Status <> System.Net.WebExceptionStatus.ProtocolError Then Throw End If Return DirectCast(ex.Response, System.Net.HttpWebResponse) End Try End Function End Class
Pues ahora me queda por resolver el segundo problema, que me da por válida (200) páginas que reálmente no existen (404), y esto ya si que no sé donde buscarlo ni como pensar en poder solucionarlo. Saludos!
|
|
|
9233
|
Programación / .NET (C#, VB.NET, ASP) / ¿ Como detectar error 404 ?
|
en: 25 Mayo 2013, 16:13 pm
|
Hola Tengo dos problemas con una página web. Esta página devuelve un error 404: http://www.mp3crank.com/releases/1925/page/1El primer problema es que necesito detectar ese error, lo he intentado mediante los "statuscode" pero a la hora de declarar la variable "response" da exception ("página no encontrada error 404"): Dim request As HttpWebRequest = HttpWebRequest.Create("http://www.mp3crank.com/releases/1925/page/1") Dim response As HttpWebResponse = request.GetResponse() Dim sr As StreamReader = New StreamReader(response.GetResponseStream()) If response.StatusCode = HttpStatusCode.NotFound Then MsgBox("Error 404") End If
Podría hacer un simple try catch en la variable "dim response" pero esto me parece muy cutre, ...¿aunque quizás esa es la única solución? EDITO: No puedo usar la solución del Framework 4.5, estoy usando 3.5 El segundo problema es que la primera vez que se accede a esa url devuelve un 404, pero si se intenta acceder una segunda vez devolverá el código 200, así que el código de arriba, aunque me funcionase para detectar el error 404 sólamente me valdría para la primera vez (aunque si se accede desde el navegador seguirá devolviendo un 404)... ...Esto no tengo ni idea de porque sucede, imagino que el servidor detecta que se ha intentado acceder a una página que no existe, y entonces por algún extraño motivo se crea automáticamente esa página de forma temporal para devolver el código "200" las siguientes veces?, hasta ahí llega mi imaginación, no lo sé. El caso es que la url que he puesto de enlace, si se testea más de una vez dará "200" pero en realidad no existe, es un "404", así que tengo dos problemas en uno y para hacer mis pruebas tengo que estar modificando cada vez el número "1925" de la url que os he dicho, por cualquier otro año entre "1XXX-1969", es un coñazo, jeje. A ver si alguien me puede ayudar, Gracias.
|
|
|
9234
|
Sistemas Operativos / Windows / [APORTE] Archivo de instalación desatendida para Windows 8 Core
|
en: 24 Mayo 2013, 22:29 pm
|
Aquí os dejo este archivo de instalación desatendida de Windows 8 que he hecho con WSIM (Windows System Image Manager), Funciona de maravilla, lo único que requiere es elegir el disco donde se desea instalar Windows 8, TODO lo demás lo he dejado preconfigurado y no requiere más intervención que lo que acabo de comentar. El nombre de usuario por defecto es "Administrador". La red por defecto es "Hogar". La hora, el idioma y esas cosas está configurado para Español de España. Posibles valores que quieran modificar: - Nombre de la organización - Nombre del PC - Nombre de usuario - La clave (Si disponen de una clave legal) ...Es fácil de modificar, solo hay que buscar el valor correspondiente en este archivo de aquí abajo, y cambiar el valor. El archivo lo guardan como "AutoUnattend.xml" y lo colocan en el DVD de Windows 8 en la carpeta principal junto al "setup.exe". PD: No lo he testeado con Windows 8 PRO. <?xml version="1.0" encoding="utf-8"?> <unattend xmlns="urn:schemas-microsoft-com:unattend"> <settings pass="windowsPE"> <component name="Microsoft-Windows-International-Core-WinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <UserLocale>es-ES</UserLocale> <UILanguageFallback>es-ES</UILanguageFallback> <UILanguage>es-ES</UILanguage> <SystemLocale>es-ES</SystemLocale> <InputLocale>es-ES</InputLocale> </component> <component name="Microsoft-Windows-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <Display> <HorizontalResolution>1920</HorizontalResolution> <VerticalResolution>1080</VerticalResolution> <ColorDepth>32</ColorDepth> </Display> <UserData> <ProductKey> <WillShowUI>Never</WillShowUI> <Key>FB4WR-32NVD-4RW79-XQFWH-CYQG3</Key> </ProductKey> <AcceptEula>true</AcceptEula> <Organization>Elektro Studios</Organization> <FullName>Christian Soriano</FullName> </UserData> <EnableNetwork>true</EnableNetwork> <EnableFirewall>true</EnableFirewall> </component> </settings> <settings pass="specialize"> <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <AutoLogon> <Enabled>true</Enabled> <LogonCount>1</LogonCount> <Username>Administrator</Username> </AutoLogon> <ComputerName>Elektro-PC</ComputerName> <ProductKey>FB4WR-32NVD-4RW79-XQFWH-CYQG3</ProductKey> <RegisteredOrganization>Elektro Studios</RegisteredOrganization> <ShowWindowsLive>false</ShowWindowsLive> <TimeZone>Romance Standard Time</TimeZone> <WindowsFeatures> <ShowInternetExplorer>false</ShowInternetExplorer> <ShowMediaCenter>false</ShowMediaCenter> <ShowWindowsMail>false</ShowWindowsMail> <ShowWindowsMediaPlayer>false</ShowWindowsMediaPlayer> </WindowsFeatures> </component> </settings> <settings pass="oobeSystem"> <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <OOBE> <HideEULAPage>true</HideEULAPage> <SkipUserOOBE>true</SkipUserOOBE> <SkipMachineOOBE>true</SkipMachineOOBE> <ProtectYourPC>3</ProtectYourPC> <NetworkLocation>Home</NetworkLocation> <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE> <HideOnlineAccountScreens>true</HideOnlineAccountScreens> <HideOEMRegistrationScreen>true</HideOEMRegistrationScreen> <HideLocalAccountScreen>true</HideLocalAccountScreen> </OOBE> <VisualEffects> <FontSmoothing>On</FontSmoothing> </VisualEffects> </component> </settings> <cpi:offlineImage cpi:source="wim:c:/users/administrador/desktop/Elektro Win8-Core-Mod/x64/sources/install.wim#Windows 8" xmlns:cpi="urn:schemas-microsoft-com:cpi" /> </unattend>
|
|
|
9235
|
Programación / Scripting / Re: [BATCH] Comparación de textos
|
en: 24 Mayo 2013, 22:13 pm
|
Comparando archivos 1.txt y 2.TXT ***** 1.txt ***** 2.TXT usuario1 usuario2 *****
FC "1.txt" "2.txt" | MORE +1 ***** 1.txt ***** 2.TXT usuario1 usuario2 *****
FC "1.txt" "2.txt" | MORE +1 | findstr /V "^\*\*\*\*\* .+$" | Findstr "." Saludos
|
|
|
9238
|
Programación / .NET (C#, VB.NET, ASP) / Re: Cronometro regresivo
|
en: 24 Mayo 2013, 17:36 pm
|
vamos, que no es dificil SyntaxError404Pero si empeizas a usar if's anidados te puedes acabar liando. Aquí tienes el source del siguiente form: http://elektrostudios.tk/WindowsApplication3.zipPublic Class Form1 Dim Run_Sound As Boolean = False Dim Run_Program As Boolean = False Dim TotalTime As Long Dim Time_Elapsed_Watch As New Stopwatch Dim Time_Remaining_Span As New TimeSpan() Dim WithEvents CountDown_Timer As New Timer Dim TimeIsOut As Boolean = False Dim Want_To_Stop As Boolean #Region " Form " Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load RadioButton1.Tag = "sound" RadioButton2.Tag = "program" End Sub Private Sub RadioButtons_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles _ RadioButton1.Click, _ RadioButton2.Click Select Case sender.tag.tolower Case "sound" : Run_Sound = True : Run_Program = False Case "program" : Run_Program = True : Run_Sound = False Case Else : Throw New Exception("Wrong tagname") End Select End Sub Private Sub NumericUpDown1_ValueChanged(sender As Object, e As EventArgs) Handles _ NumericUpDown1.ValueChanged, _ NumericUpDown2.ValueChanged, _ NumericUpDown3.ValueChanged TotalTime = (NumericUpDown1.Value * 3600000) _ + (NumericUpDown2.Value * 60000) _ + (NumericUpDown3.Value * 1000) End Sub Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click TimeIsOut = False Want_To_Stop = False CountDown_Start() While Not TimeIsOut : Application.DoEvents() : End While If Not Want_To_Stop Then Time_Success() End Sub Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click Want_To_Stop = True End Sub #End Region #Region " Procedures " Private Sub CountDown_Start() Time_Remaining_Span = TimeSpan.FromMilliseconds(TotalTime + 1000) Time_Elapsed_Watch.Start() CountDown_Timer.Start() End Sub Private Sub CountDown_Timer_Tick(sender As Object, e As EventArgs) Handles CountDown_Timer.Tick Dim TimeRemaining As TimeSpan = Time_Remaining_Span - Time_Elapsed_Watch.Elapsed If Want_To_Stop Then TimeIsOut = True : Time_Elapsed_Watch.Reset() : CountDown_Timer.Stop() Try NumericUpDown1.Value = String.Format("{0:00}", CLng(Math.Floor(TimeRemaining.TotalHours)) Mod 999999999999999999) NumericUpDown2.Value = String.Format("{0:00}", CLng(Math.Floor(TimeRemaining.TotalMinutes)) Mod 60) NumericUpDown3.Value = String.Format("{0:00}", CLng(Math.Floor(TimeRemaining.TotalSeconds)) Mod 60) Catch TimeIsOut = True Time_Elapsed_Watch.Reset() CountDown_Timer.Stop() End Try End Sub Private Sub Time_Success() If Run_Sound Then MsgBox("Reproducir sonido") ElseIf Run_Program Then MsgBox("Ejecutar proceso") Else Throw New Exception("Wrong option") End If End Sub #End Region End Class
Saludos.
|
|
|
9239
|
Programación / .NET (C#, VB.NET, ASP) / Re: Cronometro regresivo
|
en: 24 Mayo 2013, 17:00 pm
|
gracias el codigo que me das Electro.. tal parece no funciona... En ningúna parte de tú código veo que hayas usado el código que te he mostrado, tampoco veo que hayas declarado las variables de mi ejemplo. PD: Aunque tampoco voy a testear un código sin que me des detalles de porque "no funciona" Saludos!
|
|
|
9240
|
Programación / Programación General / Re: Con cual Empezar a programar(principiante)
|
en: 24 Mayo 2013, 16:49 pm
|
si le gusta la sintaxis de C/C++, pues que aprenda C/C++, C# no es superior, como das a entender. Está bien que lo aclares, no sé tanto de C# hasta el punto de saber eso, pero de todas formas mi comentario trataba sobre en la diferencia entre "nuevo y antiguo", "actual y obsoleto", esa es la definición que le quería dar a "obsoleto". ¿Para que aprender a escribir con pluma cuando existe el bolígrafo? Saludos!
|
|
|
|
|
|
|