Problemas para enviar un archivo a traves de un proxy!! Ta weno esto!!

Iniciado por Hole_System, 14 Abril 2008, 05:07 AM

0 Miembros y 1 Visitante están viendo este tema.

Hole_System

Este codigo es de HADES que conste, lo que lo he echo algunas modificaciones para ver si logro el resultado..

CODIGO ORIGINAL                AGREGENLE un BOTON, Winsock y un ComonDialog

Const Host = "www.tupagina.com" 'acá metes tu página, a la que queres mandar el archivo
Const Puerto = 80 'el puerto de conexión

Private Sub Abrir_Click()
Dim x 'declaramos variable
CD.CancelError = False 'hacemos que no tire error al darle en cancelar
CD.ShowOpen 'mostramos el diálogo para abrir el archivo
x = MsgBox("Esta seguro de enviar el archivo?", vbYesNo + vbCritical, ":P") 'damos a x el valor de lo que escogimos: "sí" , "no"
If x = vbYes Then
    UploadRequest (CD.FileName) 'Si es sí, entonces llamamos a esta función con la ruta del archivo
Else
    MsgBox "Lastima :("
End If
End Sub

Public Sub UploadRequest(Archivo$) 'Este es el sub principal, para construir la petición y mandar el archivo, recibe parámetro del archivo
Dim CodigoA$, CuerpoM$, CuerpoN$, Contenido$, LongitudR# 'Variables
Contenido = AbrirArch(Archivo) 'Llamamos a la función AbrirArch (para continuar mirar más abajo)
If Contenido <> "" Then
    CodigoA = AlphaMix 'generamos el código especificado más arriba
    CuerpoM = "--" & CodigoA & vbCrLf & _
              "Content-Disposition: form-data; name=""archivo""; filename=""" & CD.FileTitle & """" & vbCrLf & _
              "Content-Type: application/octet-stream" & vbCrLf & vbCrLf & Contenido & vbCrLf & _
              "--" & CodigoA & "--" 'empezamos a armar la cabecera, en estos momentos queda esta parte
'(codigo) (crlf)
'(Content-Disposition)(:) (datos) (crlf)
'(Content-Type)(:) (Tipo archivo) (crlf)
'(crlf)
'(contenido archivo) (crlf)
'(codigo)

    LongitudR = Len(CuerpoM) 'la longitud para el content-length

    CuerpoN = "POST /script.php HTTP/1.1" & vbCrLf & _
              "Host: " & Host & vbCrLf & _
              "Content-Type: multipart/form-data, boundary=" & CodigoA & vbCrLf & _
              "Content-Length: " & LongitudR & vbCrLf & vbCrLf & CuerpoM 'armamos la otra cabecera...
'quedaría:
'POST (Recurso) (Versión protocolo) (crlf)
'(Content-Type)(:) (Tipo de contenido)(,) (boundary)(=)(codigo) (crlf)
'(Content-Length)(:) (Longitud de datos del cuerpo del mensaje) (crlf)
'(crlf) + el contenido del archivo con sus respectivos códigos

Ws.Connect Host, Puerto 'conectamos al host

repetir:
    Do While Ws.State <> sckConnected
        DoEvents
        GoTo repetir
    Loop

    Ws.SendData CuerpoN 'mandamos archivo

End If
End Sub

Public Function AlphaMix() As String 'este es el generados del código que delimita los post
Dim CodigoA$, x&, W&
    For x = 0 To 31
        W = Random(0, 2)
        Select Case Val(W)
        Case 0
            CodigoA = CodigoA & Chr$(Random(48, 57))
        Case 1
            CodigoA = CodigoA & Chr$(Random(65, 90))
        Case 2
            CodigoA = CodigoA & Chr$(Random(97, 122))
        End Select
    Next x
AlphaMix = CodigoA
End Function

Private Function AbrirArch(RutaArchivo$) As String 'recibimos la ruta
Dim Retorno$, Longitud# 'declaramos variables
Longitud = FileLen(RutaArchivo) 'miramos la longitud de ese archivo
Retorno = String$(Longitud, Chr(0)) 'hacemos el buffer con la longitud

On Error GoTo ErrH
Open RutaArchivo For Binary As #1 'abrimos el archivo en modo binari0
Get #1, , Retorno 'obtenemos el contenido del archivo y lo guardamos en el buffer
Close #1 'cerramos canal
AbrirArch = Retorno 'retornamos el archivo
ErrH:
If Err.Description <> "" Then 'si ocurre algún error, la función devuelve un nulo
    AbrirArch = ""
    Err.Clear
End If
End Function

Private Function Random(ByVal Menor As Variant, ByVal Mayor As Variant) As Single 'función para retornar un número aleatorio
Randomize
Random = (Mayor - Menor + 1) * Rnd + Menor
If Random > Mayor Then Random = Mayor
End Function

CODIGO MODIFICADO          AGREGENLE un BOTON, TEXTBOX, Winsock y un ComonDialog

Const Host = "10.10.10.1" 'aqui sustitui la direccion de la pag por mi proxy
Const Puerto = 3128 'el puerto del proxy
Dim sendtext As String, first As Byte, CodigoA$

Private Sub Abrir_Click()
'Dim x 'declaramos variable
'CD.CancelError = False 'hacemos que no tire error al darle en cancelar
'CD.ShowOpen 'mostramos el diálogo para abrir el archivo
'x = MsgBox("Esta seguro de enviar el archivo?", vbYesNo + vbCritical, ":P") 'damos a x el valor de lo que escogimos: "sí" , "no"
'If x = vbYes Then
'    UploadRequest (CD.FileName) 'Si es sí, entonces llamamos a esta función con la ruta del archivo
'Else
'    MsgBox "Lastima :("
'End If

UploadRequest

End Sub

Public Sub UploadRequest() '(Archivo$) 'Este es el sub principal, para construir la petición y mandar el archivo, recibe parámetro del archivo

Dim CodigoA$, CuerpoM$, CuerpoN$, Contenido$, LongitudR# 'Variables

If first <> 1 Then    'Para chequear si ya se envio la instruccion por 1era vez de ser asi envio entonces el texto del TXT como tal y ya

'Contenido = AbrirArch(Archivo) 'Llamamos a la función AbrirArch (para continuar mirar más abajo)
'If Contenido <> "" Then
    CodigoA = AlphaMix 'generamos el código especificado más arriba
    CuerpoM = "--" & CodigoA & vbCrLf & _
              "Content-Disposition: form-data; name=""archivo""; filename=""log.txt""" & vbCrLf & _
              "Content-Type: application/octet-stream" & vbCrLf & vbCrLf & Text1 & vbCrLf '& _
              "--" & CodigoA & "--" 'empezamos a armar la cabecera, en estos momentos queda esta parte

    'LongitudR = Len(CuerpoM) 'la longitud para el content-length

    CuerpoN = "POST Http://localhost/script.php HTTP/1.1" & vbCrLf & _
              "Host: " & "localhost" & vbCrLf & _
              "Content-Type: multipart/form-data, boundary=" & CodigoA & vbCrLf & _
              "Content-Length: " & LongitudR & vbCrLf & vbCrLf & CuerpoM 'armamos la otra cabecera...

Ws.Connect Host, Puerto 'conectamos al host

repetir:
    Do While Ws.State <> sckConnected
        DoEvents
        GoTo repetir
    Loop
   
    Ws.SendData CuerpoN 'mandamos archivo
    first = 1
    Timer1.Enabled = True
Else
    Ws.SendData Text1
End If

'End If
End Sub

Public Function AlphaMix() As String 'este es el generados del código que delimita los post
Dim CodigoA$, x&, W&
    For x = 0 To 31
        W = Random(0, 2)
        Select Case Val(W)
        Case 0
            CodigoA = CodigoA & Chr$(Random(48, 57))
        Case 1
            CodigoA = CodigoA & Chr$(Random(65, 90))
        Case 2
            CodigoA = CodigoA & Chr$(Random(97, 122))
        End Select
    Next x
AlphaMix = CodigoA
End Function

Private Function AbrirArch(RutaArchivo$) As String 'recibimos la ruta
Dim Retorno$, Longitud# 'declaramos variables
Longitud = FileLen(RutaArchivo) 'miramos la longitud de ese archivo
Retorno = String$(Longitud, Chr(0)) 'hacemos el buffer con la longitud

On Error GoTo ErrH
Open RutaArchivo For Binary As #1 'abrimos el archivo en modo binari0
Get #1, , Retorno 'obtenemos el contenido del archivo y lo guardamos en el buffer
Close #1 'cerramos canal
AbrirArch = Retorno 'retornamos el archivo
ErrH:
If Err.Description <> "" Then 'si ocurre algún error, la función devuelve un nulo
    AbrirArch = ""
    Err.Clear
End If
End Function

Private Function Random(ByVal Menor As Variant, ByVal Mayor As Variant) As Single 'función para retornar un número aleatorio
Randomize
Random = (Mayor - Menor + 1) * Rnd + Menor
If Random > Mayor Then Random = Mayor
End Function


La cosa es la siguiente...lo que quiero es simular como que envio un archivo, pero cuando modifico la cabecera

"Content-Length: " & LongitudR & vbCrLf & vbCrLf & CuerpoM

por      "Content-Length: " & "1000" & vbCrLf & vbCrLf & CuerpoM

se me fastidia, pues el proxy me lo filtra y me llega la peticion incompleta, pq me puede estar pasando esto... si el lo que necesita saber es que yo lo que voy a enviar no puede excederse o mas bien TENDRA UN TAMAÑO DE de 1 MB..

Saludos y gracias
By Pitoniso.