Skip to content

getting response headers #22

@ftKnox

Description

@ftKnox

First let me preface by saying I am not a C coder and have been trying to figure this out for a bit. I am wanting to grab out the http response headers and put them into a map. I was able to figure out how to grab a single header by name, but have been unable to figure out how to grab out the entire list and convert into map. I looked through the gtk webkit2 docs and see it uses a callback function but I am unable to implement. Any help or insight would be appreciated.

This works to grab out a single named header:

func (v *WebView) GetResponseHeader(hdr string) string {
    return C.GoString(
        (*C.char)(
            C.soup_message_headers_get_list(
                (*C.SoupMessageHeaders)(
                    C.webkit_uri_response_get_http_headers(
                        (*C.WebKitURIResponse)(
                            C.webkit_web_resource_get_response(
                                (*C.WebKitWebResource)(
                                    C.webkit_web_view_get_main_resource(v.webView),
                                ),
                            ),
                        ),
                    ),
                ),
                C.CString(hdr),
            ),
        ),
    )
}

This is basically what i am trying to do

func (v *WebView) GetResponseHeaders() (headers map[string][]string) {

    var (
        has_key bool
    )

    headers = make(map[string][]string)

    build_headers := func(name, val string, user_data *C.gpointer) {
        if _, has_key = headers[name]; has_key {
            headers[name] = append(headers[name], val)
        } else {
            headers[name] = []string{val}
        }
    }

    _headers := (*C.SoupMessageHeaders)(
        C.webkit_uri_response_get_http_headers(
            (*C.WebKitURIResponse)(
                C.webkit_web_resource_get_response(
                    (*C.WebKitWebResource)(
                        C.webkit_web_view_get_main_resource(v.webView),
                    ),
                ),
            ),
        ),
    )

    C.soup_message_headers_foreach(
        _headers,
        (*C.SoupMessageHeadersForeachFunc)(build_headers),
        nil,
    )

    C.free(unsafe.Pointer(_headers))

    return
}

which returns:

./src/github.com/sourcegraph/go-webkit2/webkit2/webview.go:119: cannot convert func literal (type func(string, string, *C.gpointer)) to type *C.SoupMessageHeadersForeachFunc
../src/github.com/sourcegraph/go-webkit2/webkit2/webview.go:137: cannot use build_headers (type *C.SoupMessageHeadersForeachFunc) as type *[0]byte in argument to _Cfunc_soup_message_headers_foreach

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions